Linux-Befehle im C++ Program..!
-
Thx für die Erklärung legalopex..!
Ich verstehe aber immer noch nicht wie ich das mit stat machen kann und wie ich dann die infos speichern kann. z.B. wenn ich "stat %x erga" eintippe, wobei erga eine Datei ist kommt dann folgendes:
stat: Aufruf von stat für „[%x]“ nicht möglich: Datei oder Verzeichnis nicht gefunden
File: „erga.c“
Size: 125 Blocks: 16 IO Block: 4096 reguläre Datei
Device: 817h/2071d Inode: 85106 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/Bonafide) Gid: ( 100/ users)
Access: 2008-03-13 14:13:12.000000000 +0200
Modify: 2008-03-13 13:53:33.000000000 +0200
Change: 2008-03-13 13:53:33.000000000 +0200
Wieso..?
Was mache ich falsch..?
Mein Problem wäre ja dann immer noch wie ich denn, die Acces, Modify und Change time speichern kann.
Kann man das irgendwie rausfiltern, so dass ich nur die drei habe also nur acces, modify und change..!
-
In der man-page von man: stat(2) steht, wie man es benutzt!
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> : /* int stat(const char *path, struct stat *buf); struct stat { dev_t st_dev; // ID of device containing file ino_t st_ino; // inode number mode_t st_mode; // protection nlink_t st_nlink; // number of hard links uid_t st_uid; // user ID of owner gid_t st_gid; // group ID of owner dev_t st_rdev; // device ID (if special file) off_t st_size; // total size, in bytes blksize_t st_blksize; // blocksize for filesystem I/O blkcnt_t st_blocks; // number of blocks allocated time_t st_atime; // time of last access time_t st_mtime; // time of last modification time_t st_ctime; // time of last status change }; */ : struct stat stats; if (stat("test", &stats) == -1) { perror("stat"); return 1; } printf("Letzter Zugriff auf \"test\" %lu Sekunden seit 1970\n", stats.st_atime);
PS: Mein Nick heißt lagalopex... das alle immer erst an legal denken müssen
-
lagalopex schrieb:
PS: Mein Nick heißt lagalopex... das alle immer erst an legal denken müssen
Sorry, hab es falsch abgeschreieben..!
DANKE dir SEHR für deine Antwort. Habe auch endlich verstnaden was das man mit struct gemeint hat, also wie man das benutzen kann.Könnte man daraus aber das volle Datum entziehen und nicht die Sekunden..?
-
Bonafide schrieb:
Könnte man daraus aber das volle Datum entziehen und nicht die Sekunden..?
lagalopex schrieb:
Für die Ausgabe kann man dann die Zeiten noch mit man: localtime und man: strftime ins gewünschte Format bringen.
Ein Beispiel steht unten auf der manpage von strftime.
-
Also so wie ich das verstanden habe, geht die Umwandlung so:
struct tm *date; date=localtime(&stats.st_mtime);
Ist der Gedanke richtig..?
Oder total falsch..?
Und wenn es richtig sein sollte, wie kann ich denn das "printen"..?
-
Bonafide schrieb:
Also so wie ich das verstanden habe, geht die Umwandlung so:
struct tm *date; date=localtime(&stats.st_mtime);
Ist der Gedanke richtig..?
ja
Bonafide schrieb:
Und wenn es richtig sein sollte, wie kann ich denn das "printen"..?
Welche Variablen enthält denn die struct vom Typ tm?
Ein bischen mehr Eigeninitiative wäre wirklich angebracht und vielleicht einfach mal etwas rumprobieren...
-
lagalopex schrieb:
Ein bischen mehr Eigeninitiative wäre wirklich angebracht und vielleicht einfach mal etwas rumprobieren...
Naja rumprobiert habe ich schon..!
lagalopex schrieb:
Welche Variablen enthält denn die struct vom Typ tm?
struct tm {
int tm_sec; /* seconds /
int tm_min; / minutes /
int tm_hour; / hours /
int tm_mday; / day of the month /
int tm_mon; / month /
int tm_year; / year /
int tm_wday; / day of the week /
int tm_yday; / day in the year /
int tm_isdst; / daylight saving time */
};
Ich hätte das ja auch so geschreiben:struct tm *date; date=localtime(&stats.st_mtime); printf("%d-%d-%d %d:%d:%d\n",*date.tm_year,*date.tm_mon,*date.tm_day,*date.tm_hour,*date.tm_min,*date.tm_sec);
Aber das funktioniert ja nicht, also ist hier irgendwo ein gedankenfehler bei dem *date.tm_year...
Beim Compilen kommt ja immer der Fehler:
request for member ‘tm_year’ in something not a structure or union...usw..!
-
Bonafide schrieb:
lagalopex schrieb:
Ein bischen mehr Eigeninitiative wäre wirklich angebracht und vielleicht einfach mal etwas rumprobieren...
Naja rumprobiert habe ich schon..!
Dann schreibs das nächste mal hinzu.
Bonafide schrieb:
Ich hätte das ja auch so geschreiben:
struct tm *date; date=localtime(&stats.st_mtime); printf("%d-%d-%d %d:%d:%d\n",*date.tm_year,*date.tm_mon,*date.tm_day,*date.tm_hour,*date.tm_min,*date.tm_sec);
Dann schau dir nochmal die Operatoren (Priorität) an und wie man speziell mit Zeigern auf struct umgehen kann:
(*date).tm_year date->tm_year
Sollte beides gehen
-
Thx, hat funktioniert..!
Er zeigt das Datum richtig an, nur dass da immer das falsche jahr rauskommt und der falsche Monat, Uhrzeit wird korrekt angezeigt..!
Also zum Beispiel für die Datei "erga" wenn ich "ls -lu erga" im Terminal tippe kommt folgendes raus:
-rwxr-xr-x 1 Bonafide users 10809 15. Mär 01:38 ergaMit dem Testprog, wo printf so ausieht:
printf("Datum: %d-%d-%d %d:%d:%d\n",(*date).tm_year,(*date).tm_mon,(*date).tm_mday,(*date).tm_hour,(*date).tm_min,(*date).tm_sec);
wird folgendes angezeigt:
Datum: 108-2-15 1:38:49
wobei ja der erste Wert 2008 hiessen sollte und nicht 108 und der zweite Wert 3 und nicht 2.
Wo ist denn da der Fehler..?
Komisch finde ich auch das ja wie schon oben "gezeigt" bei dem "ls -lu erga"-Befehl 10809 15. Mär 01:38 erga
angezeigt wird und nicht
2008 15. Mär 01:38 erga .
Es sei denn die Zahl 10809 ist was anderes und hat mit dem Datum nix tun..!
-
Guck doch verdammt noch mal in die man-pages!!!
Die Elemente der Struktur tm sind:
[...]
tm_mon
Die Anzahl der Monate seit Januar, im Bereich 0 bis 11.
tm_year
Die Anzahl der Jahre nach 1900.Bonafide schrieb:
Komisch finde ich auch das ja wie schon oben "gezeigt" bei dem "ls -lu erga"-Befehl 10809 15. Mär 01:38 erga
angezeigt wird und nicht
2008 15. Mär 01:38 erga .
Es sei denn die Zahl 10809 ist was anderes und hat mit dem Datum nix tun..!Das ist die Dateigröße
-
lagalopex schrieb:
Guck doch verdammt noch mal in die man-pages!!!
Hast recht, stand alles drin, habe zu voreilig im forum geschrieben..!
Sry und nochmals DANKE..!