Próbuję dowiedzieć się, jak dokładnie używać stat() do przechwytywania informacji o pliku. To, czego potrzebuję, to móc wydrukować kilka pól informacji o pliku. Więc ..Using Struct Stat()
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
int main() {
struct stat buf;
stat("file",&buf);
...
cout << st_dev << endl;
cout << st_ino << endl;
cout << st_mode << endl;
cout << st_nlink << endl;
cout << st_uid << endl;
cout << st_gid << endl;
cout << st_rdev << endl;
cout << st_size << endl;
cout << st_blksize << endl;
cout << st_blocks << endl;
cout << st_atime << endl;
cout << st_mtime << endl;
cout << st_ctime << endl;
...
}
Jestem całkowicie zdezorientowany, jak to zrobić. Dlaczego & buf jest parametrem stat? Nie obchodzi mnie przechowywanie tych informacji w pamięci, potrzebuję tylko wyprowadzonych pól w moim programie C++. Jak uzyskać dostęp do informacji zawartych w struct? Czy buf rzeczywiście powinien zawierać zwrócone informacje ze stat()?
widzę, Dziękuje wszystkim za odpowiedzi. Byli bardzo pomocni. Czy ktoś wie, jak używać stdin, stdout lub stderr jako parametry do statystyk? Są to strumienie, a nie pliki, więc w jaki sposób stat może wypełnić strukturę danymi? –
Użyj 'fstat', który pobiera deskryptor pliku jako pierwszy argument zamiast ścieżki. –
Zwykle robiłbym to, ale środowisko jest nieco sztuczne, ponieważ jest to część systemu operacyjnego symulatora architektonicznego, który napisałem. Więc kiedy plik jest otwierany przez syscall, mam swój własny wektor do działania jako tablica deskryptorów plików. Czy istnieje dobry sposób na przechwycenie rzeczywistego deskryptora pliku na komputerze dla pliku w momencie jego otwarcia? Gdyby tak było, użyłbym fstat, ponieważ żadne tłumaczenie nie byłoby wymagane między statystyką strumienia a statystyką pliku. –