alive-signal

mohi01

Grünschnabel
hallo

ich sollte ein progamm schreiben, mit zwei prozessen, die über eine pipe kommunizieren. der vaterprozess schickt eine alive message "alive" an den kindprozess und der antwortet "yes". das signal wird alle 3 sekunden wiederholt.

meine frage ist jetzt, wie kann ich solche signale schicken? welchen befehl benutz ich da?
 
Zuletzt bearbeitet:
Hi.

Etwas Eigeninitiative wäre nicht schlecht. Du könntest dich z.B. erstmal über Pipes informieren. Und dann findet sich auch eine ganze Menge bei Google und hier im Forum.

Gruß
 
mit den pipes hab ich kein problem, das einzige was ich nicht verstehe ist, wie ich ein signal über diese schicke, ich hab von read() und write() gelesen, aber nix konkretes gesehen ...
 
mit den pipes hab ich kein problem, das einzige was ich nicht verstehe ist, wie ich ein signal über diese schicke, ich hab von read() und write() gelesen, aber nix konkretes gesehen ...
Dann benutze einfach mal die Suche hier im Forum - es gibt genug Beispiele hier, bei Google oder im MSDN etc. Ich habe den Eindruck du bist einfach nur zu bequem selbst etwas zu tun. Die Suche zu benutzen ist wohl nicht zuviel verlangt.

Gruß

PS: Halte dich bitte an die Netiquette! Ich habe keine Lust unleserliche Beitrage zu lesen.
 
Also mit Faulheit hat das nix zu tun ... Ich habe nur wenig Erfahrung in C-Programmierung und somit auch ein Problem, wenn von mir Zeug verlangt wird, dass ich nicht kann.
Ich hab ein Programmskelett fertig und im Forum hab ich gesucht und nichts gefunden, dass mir in meiner Situation hilft. Ich habe natürlich auch Google zu Hilfe genommen, aber da auch nichts enstprechendes gefunden.

Mein Code (das mit den 3 Sekunden warten fehlt noch):

Code:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>



int main(void){

    int pid1, pid2, fd1[2], fd2[2]; //init
    pipe(fd1);
    pipe(fd2);

    char buff[6];
    char *buffer;
    buffer = &buff;

    pid1 = fork();

    if (pid1 == 0){ // son
        
            close(fd1[1]);
            read(fd1[0], buffer, 14);
            printf("alive!");
            close(fd1[0]);
            close(fd2[0]);
            write(fd2[1], "alive!",14);
            close(fd2[1]);
        
        }
    else if (pid1 == 1){ // father
            
            close(fd2[1]);
            read(fd2[0], buffer, 14);
            printf("alive?");
            close(fd2[0]);
            close(fd1[0]);
            write(fd1[1], "alive?",14);
            close(fd1[1]);

    }
}

Ich hoffe, dass ist genug Eigeninitiative ...

ps: Ich hab vollkommen auf die Netiquette vergessen, sorry.
 
Hi.
Code:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>



int main(void){

    int pid1, pid2, fd1[2], fd2[2]; //init
    pipe(fd1);
    pipe(fd2);

    char buff[6];
    char *buffer;
    buffer = &buff;

    pid1 = fork();

    if (pid1 == 0){ // son
        
            close(fd1[1]);
            read(fd1[0], buffer, 14);
            printf("alive!");
            close(fd1[0]);
            close(fd2[0]);
            write(fd2[1], "alive!",14);
            close(fd2[1]);
        
        }
    else if (pid1 == 1){ // father
            
            close(fd2[1]);
            read(fd2[0], buffer, 14);
            printf("alive?");
            close(fd2[0]);
            close(fd1[0]);
            write(fd1[1], "alive?",14);
            close(fd1[1]);

    }
}

Ich hoffe, dass ist genug Eigeninitiative ...

ps: Ich hab vollkommen auf die Netiquette vergessen, sorry.
Na, das sieht doch schon gut aus.

Aber, du hast buff als Puffer für 6 Zeichen definiert, schreibst und liest allerdings 14 Zeichen. Wie kommst du auf 14? Siehe "man read"

Dann müßte der Vaterprozess ja erstmal "alive" auf die Pipe schreiben und dann die Antwort mit read lesen und nicht umgekehrt.

Gruß
 
Das ich den Puffer falsch initiert hab, hab ich gemerkt :) , ich hab auch schon einen Ansatz gefunden, wie ich es löse ... also Danke alle miteinander
 
Zurück