Skocz do zawartości
olka

[c/c++] Odczytywanie Rozmiaru Pliku

Rekomendowane odpowiedzi

Witam,

czy ktoś orientuje się jak odczytać rozmiar pliku z poziomu c w systemie LINUX ?

Przejrzałam już masę kursów (głównie anglojęzycznych) i jedyne co znalazłam, to filesize(), ale podobno działa tylko pod windowsem/dosem (pod linuxem w każdym razie nie, bo sprawdzałam)

Wiem, że istnieje możliwość otwarcia pliku z ustawienie wskażnika na jego końcu i odczytanie położenia tego wskaźnika, ale dla mnie jest to rozwięzanie:

1. Mało eleganckie

2. Niewygodne z uwagi na fakt, iż z tego pliku odczytywać będę dane, co wymusi konieczność ponownego pozycjonowania wskaźnika na początek pliku

 

z góry dziękuję za wszelkie sugestie

Olka

 

PS zastanawiałam sie nad użyciem funkcji systemowej która sprawdziłaby rozmiar, ale nie wiem jak (i czy w ogole sie da...) przekazać to do zmiennej w c++

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Atrybuty pliku zapisane w i-węźle można pobrać jedną z trzech funkcji systemowych:

int stat(const char *file_name, struct stat *buf);

int lstat(const char *file_name, struct stat *buf);

int fstat(int filedes, struct stat *buf);

gdzie:

file_name - nazwa ścieżkowa pliku,

filedes - deskryptor pliku,

buf - wskaźnik do struktury stat, w której zostaną zapisane atrybuty pliku.

 

Funkcje odczytują zawartość i-węzła wskazanego pliku i zapisują w buforze. Plik może być wskazany przez nazwę w funkcjach stat() i lstat() lub przez numer deskryptora otwartego pliku w funkcji fstat(). Proces nie musi posiadać żadnych uprawnień do pliku, ale musi posiadać prawo przeglądania wszystkich katalogów podanych w nazwie ścieżkowej pliku.

 

Funkcja lstat() pozwala odczytać atrybuty dowiązań symbolicznych, podczas gdy stat() podąża za dowiązaniem i operuje na pliku wskazywanym.

 

Funkcje zapisują informacje o pliku w strukturze stat zdefiniowanej następująco:

 

struct stat {

dev_t st_dev; - nazwa urządzenia, na którym plik jest zapisany

ino_t st_ino; - numer i-węzła

mode_t st_mode; - tryb pliku

nlink_t st_nlink; - liczba dowiązań

uid_t st_uid; - identyfikator właściciela UID

gid_t st_gid; - identyfikator grupy GID

dev_t st_rdev; - typ urządzenia dla plików specjalnych

off_t st_size; - rozmiar pliku w bajtach

unsigned long st_blksize; - zalecany rozmiar bloku dla operacji wejścia/wyjścia

unsigned long st_blocks; - liczba zajmowanych bloków dyskowych

time_t st_atime; - czas ostatniego dostępu do pliku

time_t st_mtime; - czas ostatniej modyfikacji zawartości

time_t st_ctime; - czas ostatniej zmiany atrybutów

}

 

Wartości atrybutów pliku ulegają zmianie w wyniku działania różnych funkcji systemowych, np. dopisanie danych do pliku powoduje zmianę rozmiaru i daty modyfikacji. Niektóre atrybuty można zmieniać wprost posługując się specjalnymi funkcjami systemowymi. Dotyczy to w szczególności identyfikatorów użytkowników i praw dostępu do pliku.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...