stat funtion
-
Halli Hallo,
ich möchte log-Dateien täglich sichern und entsprechend umbenennen.
Kein Problem dachte ich.
Naja irgendwie bin ich nun an einem Punkt den ich nicht verstehe.ich hole mir mit der stat-Funktion die entsprechenden Daten für die Datei, weelche fast alle richtig sind.
Hmmm fast alle ??
Genau bei der structur st_mtime ist der Wert für tm_wday nicht korrekt alle anderen daten stimmen.
Kann mich das jemand bestätigen oder mich eines besseren belehren ??Danke im voraus für eure Zeit und Intresse.
Gruß Dusan
-
st_mtime
ist keine Struktur sondern einfach eintime_t
-Timestamp. Ich nehme mal an, dass du so was wie man: localtime(3) nimmst, um daraus einstruct tm
machst. Welchen Wert erwartest du für tm_wday und welchen bekommst du? Hast du berücksichtigt, dass 0 Sonntags und nicht Montags ist?
-
Hallo,
yep habe ich berücksichtigt.
Es ist immer der heutige Tag.
Was mich sehr wundert weil alle anderen Daten korrekt sind wie z.B. Tag im Jahr usw.
komisch komisch komischvoid CheckLogFileForRenaming( const char* pc_FileName ) { struct stat lo_StatInfo ; char lca_NewName[256]; char lca_Sytem [512]; std::string lo_WeekDays[] = { "_vom_Sontag", "_vom_Montag", "_vom_Dienstag", "_vom_Mittwoch", "_vom_Donnerstag", "_vom_Freitag", "_vom_Samstag" }; if ( 0 != stat( pc_FileName, &lo_StatInfo ) ) { /// Die gesuchte Datei existiert nicht return; } /// Die Datei existiert und nun muss geprüft werden wann der letzte Zugriff /// auf diese war. Falls das nicht der heutige Tag ist wird diese Datei und /// den neuen Namen ge-moved und eine neue Datei erstellt. struct tm *timeinfo_File; struct tm *timeinfo_ToDay; time_t rawtime; time ( &rawtime ); /// Last modification timeinfo_File = localtime ( &lo_StatInfo.st_mtime ); unsigned int lui_LasMod = timeinfo_File->tm_year * 1000; lui_LasMod += timeinfo_File->tm_yday; /// Today timeinfo_ToDay = localtime ( &rawtime ); unsigned int lui_ToDay = timeinfo_ToDay->tm_year * 1000; lui_ToDay += timeinfo_ToDay->tm_yday; if ( lui_LasMod == lui_ToDay ) { /// Alles gleich also OK /// RAUS!!! return; } /// Die Datei muss umbenannt werden und eine neue erstellt werden. sprintf(lca_NewName,"%s%s", pc_FileName,lo_WeekDays[timeinfo_File->tm_wday].c_str() ); sprintf(lca_Sytem,"mv %s %s", pc_FileName, lca_NewName); printf("\n\n%s\n\n", lca_Sytem); system(lca_Sytem); return; }
kann ja jeder mal ausprobieren.
Danke ...
Gruß
Dusan
-
http://linux.die.net/man/3/localtime
The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the date and time functions.
-
Danke...
Wer lesen kann ist klar im Vorteil!