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. Also ..
%Vor%Ich bin völlig verwirrt darüber, wie man das macht. Warum wird ein Parameter auf stat gesetzt? 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?
Ja, buf
wird hier als Out-Parameter verwendet. Die Ergebnisse werden in buf
gespeichert und der Rückgabewert von stat
ist ein Fehlercode, der angibt, ob die Operation stat
erfolgreich war oder fehlgeschlagen ist.
Dies geschieht auf diese Weise, weil stat
eine POSIX-Funktion ist, die für C entworfen wurde und keine Fehlerberichtsmechanismen wie Exceptions unterstützt. Wenn stat
eine Struktur zurückgegeben hat, dann hätte sie keine Möglichkeit, Fehler anzuzeigen. Mit dieser Out-Parameter-Methode kann der Aufrufer auch auswählen, wo die Ergebnisse gespeichert werden sollen. Dies ist jedoch eine Nebenfunktion. Es ist vollkommen in Ordnung, die Adresse einer normalen lokalen Variablen zu übergeben, genau wie hier.
Sie greifen auf die Felder einer Struktur wie jedes andere Objekt zu. Ich nehme an, Sie sind zumindest mit Objektnotation vertraut? Z.B. Auf das st_dev
-Feld innerhalb der stat
-Struktur namens buf
wird von buf.st_dev
zugegriffen. Also:
usw.
Für ein anderes Projekt habe ich eine kleine Funktion ausgearbeitet, die etwas ähnlich macht, was Sie brauchen. Sehen Sie sich sprintstatf an.
Hier ist ein Anwendungsbeispiel:
%Vor%Sie haben mehrere Fehler in Ihrem Code:
&buf
mit einem einzigen 'f'. buf.st_dev
beim Drucken, da st_dev
ein Feld in der Strukturvariablen ist. Da buf
eine lokale Variable auf dem Stack ist, speichern Sie die Werte nicht dauerhaft im Speicher, es ist nur so lange wie diese Variable im Bereich ist.
So geben Sie mehrere Werte in C und C ++ zurück. Sie übergeben einen Zeiger auf eine Struktur, und die aufgerufene Funktion füllt die Struktur mit den Werten, die sie für Sie berechnet hat.
buf
ist die Struktur, die stat mit den Informationen über die Datei lädt, die Sie im ersten Parameter übergeben haben. Sie übergeben &buf
hier b / c Sie haben buf
auf dem Stack als lokale Variable zugewiesen und Sie müssen einen Zeiger auf die stat-Funktion übergeben, damit sie die Daten laden kann.
Alle Variablen von st_*
sind Teil des struct stat-Objekts und müssen daher über Ihre lokale buf
-Variable als buf.st_uid
usw. aufgerufen werden.
Diese Frage mag zu alt sein, um sie zu kommentieren, aber ich poste dies als Referenz
Um ein gutes Verständnis über die Funktion stat () zu erhalten, wird der Grund für die Weitergabe der Statistikreferenz und, was noch wichtiger ist, die Fehlerbehandlung im folgenden Link erklärt: