hi
ich hab wieder mal ein "kleines" problem. ich will ein programm schreiben, dass mir einen vater und kindprozess erzeugt und der vater alle 3 sekunden das kind fragt, ob es noch lebt. wenn es nicht mehr lebt, soll das programm beendet werden.
soweit funktioniert das, nur das programm schließt sich irgendwie nicht komplett
die "nachrichten" werden nicht mehr ausgegeben, deswegen denk ich, dass die schleife passen müsste, aber naja
kann mir wer helfen?
und meine zweite frage ist, dass ich eigentlich gern mit alarm() arbeiten würde, aber irgendwie bricht der das programm sofort ab, nachdem "Der Wecker geläutet hat".
mfg
Simon
edit: so jetzt scheint nur mehr das readen nicht zu gehen
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
/*
* Singal.c
* author: Simon Klausner
* version: 0.1
* purpose: - implement a communication between father and child process */
// Includes
#include <stdio.h>
#include <unistd.h>
#include <string.h>
// function: main
int main( void )
{
// Variables
pid_t PID = 0;
int iFD[2];
char* cBuffer = "Are you dead: ";
char cAlive = 'f';
int iTime = 0;
// Create pipe
pipe( iFD );
// Duplicate current process
if( PID = fork() == 0 )
{
// Childprocess
while( cAlive == 'f' )
{
dup2( STDOUT_FILENO, iFD[1] );
close( iFD[0] );
sleep(1);
iTime++;
if( iTime > 2 )
{
cAlive = 't';
write( iFD[1], &cAlive, sizeof(char) );
}
else
write( iFD[1], &cAlive, sizeof(char) );
}
}
else
{
// Fatherprocess
while( cAlive == 'f' )
{
//dup2( STDIN_FILENO, iFD[0] );
dup2( STDOUT_FILENO, iFD[1] );
// close( iFD[1] );
// close( iFD[9] );
write( iFD[1], cBuffer, strlen(cBuffer)+1 );
read( iFD[0], &cAlive, sizeof(char) );
sleep(1);
printf("%c\n", cAlive);
}
}
// Exit application
return 0;
} // endfunction: main
|