Zeit angeben



  • Hallo zusammen,

    ich würde gerne in jedem Prozess nach den Sleepzeiten die aktuelle Zeit angegeben bekommen. Leider zeigt das Programm aber immer nur die Zeit beim start des Prozesses an und zählt nicht die entsprechenden sekunden weiter. Könnte mir jemand behilflich sein? Vielen Dank

    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <errno.h>
    #include <time.h>
    #include <wait.h>

    struct tm *localtime(const time_t *t);

    int main()
    {
    int P2;
    time_t t;
    struct tm *ts;
    t = time(NULL);
    ts = localtime(&t);
    time(&t);

    P2 = fork();
    if (P2 < 0){
    printf(" Fehler bei Forken()!!!\n");}

    else if (P2 > 0) {
    printf("[PID: %d, PPID: %d] Vater erster Aufruf P1, Start von XEYES\n", getpid(), getppid());
    printf("%s", asctime(ts));
    printf("[PID: %d, PPID: %d] Vater geht nun 5 Sekunden schlafen. Xeyes wird danach angehalten\n", getpid(), getppid());
    sleep(5);
    printf("%s", asctime(ts));
    kill(P2,SIGSTOP);
    sleep(5);
    printf("%s", asctime(ts));
    kill(P2,SIGCONT);
    sleep(3);
    kill(P2,SIGHUP);
    printf("[PID: %d, PPID: %d] Vater beendet sich\n", getpid(), getppid());
    exit (1);

    }
    else if (P2 == 0){
    printf("[PID: %d, PPID: %d] Kind P2\n", getpid(), getppid());

    printf("%s", asctime(ts));

    //printf("Hallo in Kind 1 \n");

    char *arguments[7];
    arguments[0] = "xeyes";
    arguments[1] = "+shape";
    arguments[2] = "-fg";
    arguments[3] = "blue";
    arguments[4] = "-bg";
    arguments[5] = "green";
    arguments[6] = NULL;
    execvp ("xeyes", arguments);

    }
    return 0;
    }[code="c"]



  • An welcher Stelle holst du dir denn die aktuelle Zeit? Ich seh nur einen time-Aufruf ganz am Anfang. Vielleicht solltest du mal nachlesen, was asctime macht.



  • asctime konvertiert das datum und uhrzeit in eine zeichenkette. die zeit wird ja auch bei jeder printf anweisung ausgegeben jedoch nur die "startzeit" des programms und eben nicht weitergezählt.



  • Ja eben. asctime konvertiert die Zeit nur, und liest sie nicht neu ein ...



  • Und wie lese ich die zeit dann an eben den besagten Stellen am besten neu aus? Weißt du das?
    Gruß



  • Genauso wie sonst auch, mit time.



  • Boah ich bin doch neu in der Materie, hast Du vielleicht ein Beispiel zu meinem Codeauschnitt? 🙂



  • Nicolas_C schrieb:

    Boah ich bin doch neu in der Materie

    Kann nicht sein, fork/exec ist nichts für Anfänger. Definitiv.

    hast Du vielleicht ein Beispiel zu meinem Codeauschnitt? 🙂

    Es steht schon alles da, du musst es nur nochmal abschreiben. Das setzt natürlich voraus, dass das Programm überhaupt von dir ist. Wenn nicht, hast du natürlich ein Problem.



  • Das Programm ist selbstverständlich von mir. Ich weiß nur nicht was ich wohin abschreiben soll...



  • Nicolas_C schrieb:

    Das Programm ist selbstverständlich von mir. Ich weiß nur nicht was ich wohin abschreiben soll...

    Du hast also diese Zeilen geschrieben, ohne zu wissen, was sie tun? Respekt.



  • wenn man die time funktionen googelt und sie dann abtippt aber nicht weiß, an welcher stelle man jetzt genau das einfügen muss, weiß ich nicht, was daran nun verwerflich sein soll?! aber trotzdem danke für die zahlreichen tipps



  • Es gibt mehr als ein Beispiel für time im Netz.
    Und es gibt auch mehr als eine Referenz/man-Page dazu.

    http://www.cplusplus.com/reference/ctime/



  • Danke, hat funktioniert. Die funktion einfach vor dem Print nochmal aufrufen :/. Danke


Anmelden zum Antworten