2012-07-07 7 views
8

Ich möchte C. das Datum der letzten Änderung einer Datei erhalten Fast alle Quellen, die ich nutzen, um etwas entlang dieser Schnipsel gefunden:Erste das Datum der letzten Änderung einer Datei in C

char *get_last_modified(char *file) { 
    struct tm *clock; 
    struct stat attr; 

    stat(file, &attr); 
    clock = gmtime(&(attr.st_mtime)); 

    return asctime(clock); 
} 

Aber die attr doesn‘ t haben sogar ein Feld st_mtime, nur st_mtimespec. Doch wenn ich dies verwende, sagt mir mein Eclipse, dass passing argument 1 of 'gmtime' from incompatible pointer type auf der Linie clock = gmtime(&(attr.st_mtimespec));

Was mache ich falsch?

PS: ich auf OSX Snow Leopard, Eclipse-CDT bin die Entwicklung und Verwendung von GCC als Cross-Platform-Compiler

+0

Ja, sonst wäre "stat" selbst nicht verfügbar. –

+1

Obwohl OT: Sie wollen nicht die Referenz von 'get_last_modified()' gespeichert speichern, nicht wahr? 'asctime()' gibt einen Verweis auf statischen Speicher zurück, dessen Inhalt bei jedem nachfolgenden Aufruf überschrieben wird. – alk

+0

Es wird nur einmal aufgerufen, aber ich behalte es im Hinterkopf, sollte sich das jemals ändern :) –

Antwort

5

Unter O X st_mtimespec.tv_sec ist die äquivalent von st_mtime.

Um dieses tragbare zu machen, tun

#ifdef __APPLE__ 
#ifndef st_mtime 
#define st_mtime st_mtimespec.tv_sec 
#endif 
#endif 

und dann st_mtime verwenden.

+0

Gibt es eine Möglichkeit, dies zu einem Cross-Compilant zu machen? Das Programm muss auf Ubuntu ohne Warnungen und Fehler laufen, aber ich habe keine VM zum programmieren auf ... –

+0

Siehe bearbeitete Antwort. – mpartel

+0

Jetzt sagt es mir, dass 'Feld 'tv_sec' nicht aufgelöst werden konnte –

Verwandte Themen