PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Prog_Prozesse



Lupus84
09-05-2007, 08:50
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;
}

lokicall
09-05-2007, 18:03
Suchst du sowas?


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);
}
}

Lupus84
22-05-2007, 19:16
Habe schon selbst etwas raus! Aber trotzdem danke!

jan61
28-05-2007, 21:00
Suchst du sowas?


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:

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