Tôi biết tôi có thể nhận kích thước tệp là FILE *
bởi fseek
, nhưng những gì tôi có chỉ là INT fd.Làm thế nào để bạn nhận được kích thước tệp bằng fd?
Làm cách nào để có kích thước tệp trong trường hợp này?
Tôi biết tôi có thể nhận kích thước tệp là FILE *
bởi fseek
, nhưng những gì tôi có chỉ là INT fd.Làm thế nào để bạn nhận được kích thước tệp bằng fd?
Làm cách nào để có kích thước tệp trong trường hợp này?
fstat sẽ hoạt động. Nhưng tôi không chính xác chắc chắn làm thế nào bạn có kế hoạch nhận được kích thước tập tin thông qua fseek trừ khi bạn cũng sử dụng ftell (ví dụ như fseek đến cùng, sau đó ftell bạn đang ở đâu). fstat là tốt hơn, ngay cả đối với FILE, vì bạn có thể lấy bộ mô tả tập tin từ trình xử lý FILE (thông qua fileno).
stat, fstat, lstat - get file status
int fstat(int fd, struct stat *buf);
struct stat {
…
off_t st_size; /* total size, in bytes */
…
};
Tôi thích viết mẫu mã của tôi như các chức năng để họ sẵn sàng để cắt và dán vào mã:
int fileSize(int fd) {
struct stat s;
if (fstat(fd, &s) == -1) {
int saveErrno = errno;
fprintf(stderr, "fstat(%d) returned errno=%d.", fd, saveErrno);
return(-1);
}
return(s.st_size);
}
Thử [ 'fdopen'] (http://pubs.opengroup.org /onlinepubs/9699919799/functions/fdopen.html) để có được một 'FILE *' trong một bộ mô tả tập tin. – pmg
AFAIR C (nghĩa là thư viện C) không biết gì về các bộ mô tả tệp. Hãy chính xác hơn trong câu hỏi của bạn và các thẻ của bạn. –