C-Programm – neueste Datei eines Verzeichnisses (Linux)

closeDieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!

Unter Linux kann man mit dem folgendem Befehl anzeigen lassen, welche die neuste Datei ist…

ls -1tr --group-directories-first /path/to/dir/ | tail -n 1

… habe gerade versucht dies mit C zu Programmieren, ggf. findest man noch Fehler im Skript!!! :-)

PS: weitere Infos zum arbeiten mit Dateien und Verzeichnissen findest du hier -> openbook.galileocomputing.de/c_von_a_bis_z/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

time_t st_mTime(char *dir_name) {
    struct stat attribut;

    // printf("%s\n", dir_name); /* Test Ausgabe */
    if (stat(dir_name, &attribut) == -1) {
        fprintf(stderr, "... stat-Fehler\n");
        exit(1);
    }
    if (attribut.st_mode & S_IFREG) {
        return attribut.st_mtime;
    } else {
        return 0;
    }
}

int main(int argc, char *argv[]) {
    int length;
    char dir_name[1000];
    char dir_name_1[1000];
    char dir_name_2[1000];
    DIR *dir;
    time_t t1, t2;
    struct dirent *dir_info;

    if (argc>2) {
        fprintf(stderr, "Es ist nur ein Argument (Verzeichnis) erlaubt!!!\n");
        exit(1);
    }
    if (argc==2) {
        strcpy(dir_name, argv[1]);
    } else {
        strcpy(dir_name, ".");
    }

    if ((dir = opendir(dir_name)) == NULL) {
        fprintf(stderr, "kann %s nicht öffnen", dir_name);
        exit(2);
    }

    length=strlen(dir_name);
    if ((dir_name[length]) != "/") {
        strcat(dir_name, "/");
    }

    while ((dir_info = readdir(dir)) != NULL) {
        strcpy(dir_name_1, dir_name);
        strcat(dir_name_1, (char*)dir_info->d_name );

        while ((dir_info = readdir(dir)) != NULL) {
            strcpy(dir_name_2, dir_name);
            strcat(dir_name_2, (char*)dir_info->d_name );

            t1=st_mTime(dir_name_1);
            t2=st_mTime(dir_name_2);
             if(t1!=t2) {
                if(t1>t2) {
                    strcpy(dir_name_1, dir_name_1);
                } else if (t1

Veröffentlicht von

voku

Lars Moelleken | Ich bin root, ich darf das!

  • WordPress 3.1 formatiert munter im Quelltext herum :-( daher hier der korrekte Code

    -> http://voku.pastebin.com/QvGXBUyM

  • … das so ein kleines C-Programm schneller ist als ein Shell-Skript, merkt man erst, wenn man dieses öfter hintereinander ausführt :-) z.B.:

    for i in `seq 1 100`; do ./a.out; done;

    for i in `seq 1 100`; do ls -1tr –group-directories-first . | tail -n 1; done;