PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit stat(*file,struct stat *buf);



ContainerDriver
15-01-2003, 12:46
Ich hab ein kleines Problem mit meinem Programm (ein Programm zum Vokabelabfragen).
Das Prog. öffnet ein bestimmte Wortdatei und man kann auswählen welche Sektion man sich aus der Datei abfragen lassen will. Dann wird diese Sektion in eine Datei kopiert und das Programm greift nur noch auf diese Datei zu. So weit so gut.
Bei großen Dateien dauert dies aber sehr lange. Nun will eine Methode schreiben, die überprüft, ob die Orginalatei seit der letzten Anfrage verändert wurde oder nicht. Wenn nicht, kann man einfach die alte Datei (die vorher schon aus der Orginaldatei kopiert wurde) zum einlesen nehmen.
In den man-Pages hab ich da die Funktion "int stat(file,struct stat *buf);" gefunden.
Ich erstell also eine Struktur:

file[]={"latin_ger.et"};
struct stat *buf;

Ruf dann stat auf:

stat(file,*buf);

Wenn ich nun aber auf buf zugreifen will etwa ($IRGENDETWAS ist ein Teil der Struktur aus dem Header, den genauen Namen weis ich jedoch jetzt nicht, da ich nicht daheim bin):

cout << buf.$IRGENDETWAS << endl;

lässt es sich nicht mehr kompilieren.

Wie bekomme ich nun einen Aufruf mit stat(..); hin, der das Datum der letzten Änderung ausgibt?

Danke für die Antworten, Florian.

Jasper
15-01-2003, 14:15
Original geschrieben von florian hanisch
Ich hab ein kleines Problem mit meinem Programm (ein Programm zum Vokabelabfragen).
Das Prog. öffnet ein bestimmte Wortdatei und man kann auswählen welche Sektion man sich aus der Datei abfragen lassen will. Dann wird diese Sektion in eine Datei kopiert und das Programm greift nur noch auf diese Datei zu. So weit so gut.
Bei großen Dateien dauert dies aber sehr lange. Nun will eine Methode schreiben, die überprüft, ob die Orginalatei seit der letzten Anfrage verändert wurde oder nicht. Wenn nicht, kann man einfach die alte Datei (die vorher schon aus der Orginaldatei kopiert wurde) zum einlesen nehmen.
In den man-Pages hab ich da die Funktion "int stat(file,struct stat *buf);" gefunden.
Ich erstell also eine Struktur:

file[]={"latin_ger.et"};
struct stat *buf;

Ruf dann stat auf:

stat(file,*buf);

Wenn ich nun aber auf buf zugreifen will etwa ($IRGENDETWAS ist ein Teil der Struktur aus dem Header, den genauen Namen weis ich jedoch jetzt nicht, da ich nicht daheim bin):

cout << buf.$IRGENDETWAS << endl;

lässt es sich nicht mehr kompilieren.

Wie bekomme ich nun einen Aufruf mit stat(..); hin, der das Datum der letzten Änderung ausgibt?

Danke für die Antworten, Florian.

du musst dich entscheiden, ob buf statisch oder dynamisch ist. beides zusammen geht nicht.

statisch:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main() {
char filename[]="t.c";
struct stat buf;
stat( filename, &buf );
printf("%s\n", ctime(&(buf.st_mtime)));
}

dynamisch:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main() {
char filename[]="t.c";
struct stat *buf;
buf = (struct stat*)malloc(sizeof(struct stat));
stat( filename, buf );
printf("%s\n", ctime(&(buf->st_mtime)));
free(buf);
}

-j

ContainerDriver
17-01-2003, 12:24
Vielen Dank!
MFG Florian.