Wiem, że mogę uzyskać rozmiar pliku FILE *
przez fseek
, ale to, co mam, to tylko INT fd.Jak uzyskać rozmiar pliku na FD?
Jak mogę uzyskać rozmiar pliku w tym przypadku?
Wiem, że mogę uzyskać rozmiar pliku FILE *
przez fseek
, ale to, co mam, to tylko INT fd.Jak uzyskać rozmiar pliku na FD?
Jak mogę uzyskać rozmiar pliku w tym przypadku?
fstat zadziała. Ale nie jestem do końca pewien, w jaki sposób planujesz uzyskać rozmiar pliku za pomocą fseek, chyba że użyjesz również ftell (np. Fseek do końca, a następnie ftell, gdzie jesteś). fstat jest lepszy, nawet dla FILE, ponieważ możesz dostać deskryptor pliku z uchwytu FILE (przez fileno).
stat, fstat, lstat - get file status
int fstat(int fd, struct stat *buf);
struct stat {
…
off_t st_size; /* total size, in bytes */
…
};
Lubię pisać moje próbki kodu jako funkcje są więc gotowe do wycinania i wklejania do kodu:
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);
}
Try [ 'fdopen'] (http://pubs.opengroup.org /onlinepubs/9699919799/functions/fdopen.html), aby pobrać plik 'FILE * 'z deskryptora pliku. – pmg
AFAIR C (tzn. Biblioteka C) nic nie wie o deskryptorach plików. Dokładniej wpisz swoje pytanie i swoje tagi. –