Chương 8<br />
Tệp (FILE)<br />
Ngo Van Linh<br />
Bộ môn Các hệ thống thông tin<br />
Viện Công nghệ thông tin và Truyền thông<br />
Đại học Bách Khoa Hà Nội<br />
<br />
1<br />
<br />
Nội dung<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
8.1.<br />
8.2.<br />
8.3.<br />
8.4.<br />
8.5.<br />
8.6.<br />
8.7.<br />
8.8.<br />
8.9.<br />
vị<br />
<br />
Giới thiệu<br />
Kiểu xuất nhập nhị phân và văn bản<br />
Các hàm thao tác cấp 2<br />
Đóng/mở tệp, xóa vùng đệm, kiểm tra lỗi<br />
Nhập xuất ký tự<br />
Các hàm nhập xuất theo kiểu văn bản<br />
Tệp văn bản và các thiết bị chuẩn<br />
Các hàm nhập xuất theo kiểu nhị phân<br />
Nhập xuất ngẫu nhiên, di chuyển con trỏ chỉ<br />
2<br />
<br />
8.1. Giới thiệu<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Một tệp tin đơn giản chỉ là một dãy các byte (mỗi<br />
byte có giá trị từ 0 đến 255) ghi trên đĩa. Số byte<br />
của dãy chính là độ dài của tệp.<br />
Chương này trình bày các thao tác trên tệp như<br />
tạo một tệp mới, ghi dữ liệu từ bộ nhớ lên tệp,<br />
đọc dữ liệu từ tệp vào bộ nhớ,...<br />
Trong C, các thao tác trên tệp được thực hiện<br />
nhờ các hàm thư viện. Các hàm này được chia<br />
thành 2 nhóm: cấp 1 và cấp 2.<br />
Mỗi hàm (cấp 1 hay cấp 2) đều có thể truy xuất<br />
theo cả hai kiểu nhị phân và văn bản.<br />
3<br />
<br />
8.1. Giới thiệu<br />
<br />
<br />
Các hàm cấp 1:<br />
<br />
<br />
<br />
<br />
<br />
thực hiện việc đọc/ghi như DOS<br />
Không có dịch vụ xuất nhập riêng cho từng<br />
kiểu dữ liệu mà chỉ có dịch vụ đọc/ghi một dãy<br />
các byte. Ví dụ: để ghi 1 số thực lên đĩa, ta<br />
dùng dịch vụ ghi 4 byte; để ghi 10 số nguyên<br />
lên đĩa, ta dùng dịch vụ ghi 20 byte.<br />
Mỗi tệp có một số hiệu (handle). Các hàm cấp<br />
1 làm việc với tệp thông qua số hiệu tệp này.<br />
4<br />
<br />
8.1. Giới thiệu<br />
<br />
<br />
Các hàm cấp 2:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
được xây dựng từ các hàm cấp 1 nên dễ sử dụng và có nhiều khả<br />
năng hơn.<br />
có dịch vụ truy xuất cho từng kiểu dữ liệu. Ví dụ: hàm xuất nhập<br />
ký tự, chuỗi, số nguyên, số thực, cấu trúc,...<br />
C tự động cung cấp một vùng đệm. Mỗi lần đọc/ghi thường tiến<br />
hành trên vùng đệm chứ không hẳn trên tệp. Khi ghi dữ liệu thì<br />
dữ liệu được đưa vào vùng đệm, khi nào vùng đệm đầy thì dữ liệu<br />
ở vùng đệm mới được đẩy lên đĩa. Khi đọc, thông tin được lấy ra<br />
từ vùng đệm, khi nào vùng đệm trống thì máy mới lấy dữ liệu từ<br />
đĩa đưa vào vùng đệm giảm só lần nhập xuất trên đĩa, nâng<br />
cao tốc độ làm việc.<br />
làm việc với tệp thông qua một biến con trỏ tệp.<br />
<br />
5<br />
<br />