Anzeige:
Ergebnis 1 bis 4 von 4

Thema: C-Prog_Prozesse

  1. #1
    Registrierter Benutzer Avatar von Lupus84
    Registriert seit
    09.05.2007
    Ort
    Krefeld
    Beiträge
    5

    C-Prog_Prozesse

    Ich habe folgendes Problem:
    Ich möchte im unten stehenden Programm,die Ausgabe"Ping! und Pong!" in eine Datei schreiben, die ich am Ende des Programms wieder ausgebe... dies soll mit den Befehlen: open(),write(),lseek(),read(), close() umgesetzt werden. Ich habe schon überall nachgeschaut aber ich finde kein konkretes Beispiel, welches mir die korrekte Anwenudung bzw. Syntax aufzeigt ...



    #include<stdio.h>
    #include<signal.h>

    void sighand(){
    signal(SIGUSR1, &sighand);
    printf("Signal SIGUSR1 empfangen. \n\n");

    }

    int main (){

    int i, j, k ;
    int k_pid1, k_pid2, status;

    signal(SIGUSR1, &sighand);
    printf(" \n");


    if((k_pid1 = fork()) == 0){
    for(i = 1; i <= 6; i++){
    pause();
    printf("Ping! \n");
    kill(getppid(), SIGUSR1);
    }
    exit(0);
    }

    if((k_pid2 = fork()) == 0){
    for(j = 1; j<= 6; j++){
    pause();
    printf("Pong! \n");
    kill(getppid(), SIGUSR1);
    }
    exit(0);
    }



    system("ps");
    printf("\n");
    printf("Eltern : Eigene Prozess ID ist : %d Kind1 : %d Kind2: %d \n", getpid(), k_pid1, k_pid2);
    printf("\n");

    for(k=1; k<=6; k++){ //Kindprozesse Kontrolle
    sleep(1);
    kill(k_pid1,SIGUSR1);
    pause();

    sleep(1);
    kill(k_pid2,SIGUSR1);
    pause();
    }

    waitpid(k_pid1, &status, 0 );
    waitpid(k_pid2, &status, 0 );
    printf("\n");
    printf("Eltern : Beide Kinder sind terminiert!\n");
    printf("\n");



    return 0;
    }

  2. #2
    Registrierter Benutzer Avatar von lokicall
    Registriert seit
    17.12.2005
    Beiträge
    53
    Suchst du sowas?

    Code:
    int pid, status;
    int wbyte, rbyte;
    int ufd_nr;
    char *buffer1 ="Hello friends !";
    char buffer2[50];
    
    main() {
        ufd_nr =open("output", 2);
        pid = fork();
         if( pid == 0) {
            wbyte = write( ufd_nr, buffer1, 16);
            printf("child hat %d Bytes geschrieben \n", wbyte );
       }
       else {
           wait( &status );
           lseek(ufd_nr, 0, 0);
           rbyte= read( ufd_nr, buffer2, 15 );
           printf("parent hat %d Bytes gelesen ! \n", rbyte);
           printf("Kontrolldruck:\n %s\n", buffer2);
       }
    }

  3. #3
    Registrierter Benutzer Avatar von Lupus84
    Registriert seit
    09.05.2007
    Ort
    Krefeld
    Beiträge
    5
    Habe schon selbst etwas raus! Aber trotzdem danke!

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von lokicall Beitrag anzeigen
    Suchst du sowas?

    Code:
    int pid, status;
    int wbyte, rbyte;
    int ufd_nr;
    char *buffer1 ="Hello friends !";
    char buffer2[50];
    
    main() {
        ufd_nr =open("output", 2);
        pid = fork();
         if( pid == 0) {
            wbyte = write( ufd_nr, buffer1, 16);
            printf("child hat %d Bytes geschrieben \n", wbyte );
       }
       else {
           wait( &status );
           lseek(ufd_nr, 0, 0);
           rbyte= read( ufd_nr, buffer2, 15 );
           printf("parent hat %d Bytes gelesen ! \n", rbyte);
           printf("Kontrolldruck:\n %s\n", buffer2);
       }
    }
    Kleine Anmerkung: Du fängst den Fall pid == -1 nicht ab. Im Allgemeinen sieht man deshalb bei einem fork() i. d. R. folgende switch-Konstruktion:
    Code:
    switch (fork()) {
    case 0: /*child */
        ...
    case -1: /* error */
        ...
    default: /* parent */
        ...
    }
    Das hat sich bewährt, da sollte man nicht das Rad (fehlerhaft) neu erfinden.

    Jan

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •