Trong lập trình C, một trong những tác vụ phổ biến khi làm việc với tệp là theo dõi và thao tác vị trí của con trỏ tập tin. Con trỏ này xác định vị trí cụ thể trong tệp nơi mà các hành động đọc hoặc ghi tiếp theo sẽ được thực hiện. Một trong những hàm hữu ích để truy vấn vị trí hiện tại của con trỏ tập tin là ftell()
.
Giới thiệu về ftell()
Hàm ftell()
được sử dụng để trả về vị trí hiện tại của con trỏ tập tin dưới dạng một giá trị kiểu long int
. Nếu thành công, hàm sẽ trả về giá trị dương, thể hiện điểm đến của con trỏ tính theo byte từ đầu tệp. Nếu xảy ra lỗi, hàm sẽ trả về giá trị -1L
và thiết lập biến errno
để chỉ định lỗi cụ thể.
Cú pháp
long int ftell(FILE *stream);
stream
: là con trỏ đến đối tượng FILE đại diện cho tệp.
Sử dụng ftell()
trong chương trình C
Để hiểu rõ hơn về cách sử dụng hàm này, hãy cùng xem ví dụ sau, minh họa việc mở một tệp, di chuyển con trỏ bên trong, và sử dụng ftell()
để truy vấn vị trí hiện tại của con trỏ tập tin.
Ví dụ minh họa
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file;
long int pos;
// Mở tệp để đọc và ghi (tạo tệp nếu chưa tồn tại)
file = fopen("example.txt", "w+");
if (file == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
// Ghi một số dữ liệu vào tệp
fputs("Hello, World!\n", file);
// Di chuyển con trỏ tập tin đến đầu tệp
fseek(file, 0, SEEK_SET);
// Lấy vị trí hiện tại của con trỏ tập tin
pos = ftell(file);
if (pos == -1L) {
perror("Error obtaining position");
} else {
printf("Current position: %ld\n", pos);
}
// Đóng tệp
fclose(file);
return EXIT_SUCCESS;
}
Phân tích ví dụ
- Mở tệp: Chúng ta mở tệp "example.txt" với chế độ
w+
, cho phép đọc và ghi, và tạo tệp nếu nó chưa tồn tại. - Ghi dữ liệu: Hàm
fputs()
được sử dụng để ghi một dòng văn bản vào tệp. - Di chuyển con trỏ: Hàm
fseek()
với các đối số0
vàSEEK_SET
di chuyển con trỏ tập tin về đầu tập tin. - Truy vấn vị trí con trỏ: Hàm
ftell()
được sử dụng để lấy vị trí hiện tại của con trỏ tập tin. Kết quả được in ra màn hình. - Đóng tệp: Cuối cùng, tệp được đóng lại bằng
fclose()
.
Lưu ý
- Khi sử dụng
ftell()
, nếu bạn thấy kết quả trả về là-1L
, điều đó biểu thị một lỗi đã xảy ra. Luôn có kiểm tra lỗi để đảm bảo hoạt động của chương trình đúng đắn. ftell()
không chỉ hữu ích trong các thao tác đọc và ghi tuần tự, mà còn rất hữu ích trong việc ghi lại và điều hướng các vị trí khác nhau trong tệp để xử lý linh hoạt hơn.
Kết luận
Việc nắm vững cách sử dụng hàm ftell()
giúp bạn có khả năng kiểm soát linh hoạt vị trí của con trỏ tập tin trong các chương trình C, tạo điều kiện thuận lợi cho việc xử lý tệp hiệu quả và chính xác.
Comments