fork() und dateizugriff



  • Hi leute,
    ich hoffe es kann mir einer von euch sagen wie man ein und die selbe datei nach einem aufruf von fork() bearbeiten kann.

    Mein ansatz war folgender:

    FILE *logfile;
    
    int main(void){
    int pid;
    
    logfile=fopen("logfile.log","a+");
    if(logfile == NULL){
        printf("Could not open Logfile\n");
        exit(1);
    }else{
        fprintf(logfile,"started program\n");
    }
    
    pid = fork();
    
    if(pid==0){
        fprintf(logfile,"started child-process\n");
    }else if(pid>0){
        fprintf(logfile,"started mother-process\n");
    }else{
        fprintf(logfile,"error starting child-process\n");
        exit(1);
    }
    
    return EXIT_SUCESS;
    }
    

    Die Ausgabe sieht folgendermaßen aus:

    started program
    started mother-process
    

    Bitte um Hilfe

    MFG



  • du brauchst dazu einen mechanismus zur synchronisation der schreiboperationen. schau dir mal fcntl an. das bietet so einen mutex für einen datei descriptor. du wirst dazu auch die funktion fileno brauchen.



  • Ich wuerde jetzt mal vermuten, dass du, da du den filehandler im parentprozess erzeugst, nicht mit dem childprozess auf den handler zugreifen kannst, da die datei durch den parentprozess gesperrt ist. dass heisst, du koenntest bspw. die messages der prozesse in einen ungesperrten speicherbereich (shm o.ae.) schreiben und dann den speicherinhalt in die datei dumpen.



  • fragesteller000 schrieb:

    Hi leute,
    ich hoffe es kann mir einer von euch sagen wie man ein und die selbe datei nach einem aufruf von fork() bearbeiten kann.

    Gemeinsame Ressourcen muss man schützen. Wie schon erwähnt wurde: schau dir mutex, semaphores an.



  • Danke Leute,
    ich hab das ganze anders lösen müssen, da das auf Linux basierende zielsystem (iPhone-os) kein echtes multithreading besitzt.
    D.h es wird zuerst der eine thread abgearbeitet, bevor der zweite beginnt. danke Apple 😡

    Trotzdem danke

    MFG



  • Klingt so, als solltest Du mehr zum iPhone-OS lesen. Die Threading-Fähigkeiten sind hinreichend dokumentiert und es basiert nicht auf Linux.



  • Tut mir leid, ich hab mich wohl doch getäuscht:

    1. iphone unterstützt kein multithreading = blödsinn
      ich hab das ganze mal mit nem kleinen testprogramm probiert, und hatte
      erfolgreiches multithreading 😃
    2. ich weiß das es nicht auf linux basiert, aber linuxähnlich ist.

    MFG



  • fragesteller000 schrieb:

    1. ich weiß das es nicht auf linux basiert, aber linuxähnlich ist.

    Eigentlich auch überhaupt nicht. 🙂
    Es basiert auf OS X und das wiederum verwendet Darwin. Sind eben beides Unices, aber das wars dann schon größtenteils.





  • rüdiger schrieb:

    man: flockfile

    funktioniert diese funktion auch zwischen threads verschiedener prozesses? ich bin mir da nicht sicher.


Anmelden zum Antworten