Verwendung von Struct Stat ()

8

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?

    
Dan Snyder 18.08.2010, 13:14
quelle

5 Antworten

11

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:

%Vor%

usw.

    
Tyler McHenry 18.08.2010, 13:18
quelle
3

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%     
Jon Bringhurst 12.09.2011 22:13
quelle
2

Sie haben mehrere Fehler in Ihrem Code:

  • Sie benötigen &buf mit einem einzigen 'f'.
  • Sie müssen z. 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.

    
unwind 18.08.2010 13:16
quelle
1

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.

    
RC. 18.08.2010 13:19
quelle
1

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:

stat - Abrufen des Dateistatus

    
Ram 15.07.2014 07:09
quelle

Tags und Links