Ich versuche herauszufinden, wie man genau stat() verwendet, um Informationen über eine Datei zu erfassen. Was ich brauche, ist, mehrere Informationsfelder über eine Datei drucken zu können. So ..Verwenden von 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;
...
}
Ich bin gründlich verwirrt darüber, wie dies zu tun ist. Warum ist & ein Parameter zu Stat? Es ist mir egal, diese Informationen im Speicher zu speichern, ich brauche nur die ausgegebenen Felder in meinem C++ Programm. Wie greife ich auf die in der Struktur enthaltenen Informationen zu? Soll buf tatsächlich die zurückgegebenen Informationen von stat() enthalten?
ich sehe, danke alle für die Antworten. Sie waren sehr hilfreich. Weiß jemand, wie stdin, stdout oder stderr als Parameter für stat funktioniert? Dies sind Streams und keine Dateien. Wie kann stat eine Struktur mit Daten füllen? –
Verwenden Sie 'fstat', das anstelle eines Pfads einen Dateideskriptor als erstes Argument verwendet. –
Normalerweise würde ich das tun, aber die Umgebung ist etwas künstlich, da dies der OS-Teil eines Architektur-Simulators ist, den ich geschrieben habe. Wenn also eine Datei von einem Systemaufruf geöffnet wird, habe ich einen eigenen Vektor, der als Dateideskriptortabelle fungiert. Gibt es eine gute Möglichkeit, den tatsächlichen Dateideskriptor auf dem Computer für eine geöffnete Datei zu erfassen? Wenn das der Fall wäre, würde ich fstat verwenden, da keine Übersetzung zwischen Stream-Statistiken und Datei-Statistiken erforderlich wäre. –