Ik ben een kleine shell aan het schrijven die commando's met een pipe '|' moet kunnen uitvoeren, maar nu heb ik het probleem dat mijn shell blijft hangen als ik bijvoorbeeld het commando "ls | wc" intik. Ik denk dat dit komt omdat het process dat het commando "wc" uitvoert maar blijft wachten op input (de output van process dat "ls" uitvoert). Hoe kan ik dit oplossen?
Code ziet er alsvolgt uit:
modbreak: gebruik aub zelf [code=c] tags om je code leesbaar te houden, scheelt mij werk
Code ziet er alsvolgt uit:
C:
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
| pid1 = fork(); if (pid1 == -1) { return -1; } if (pid1 == 0) { // CHILD pid2 = fork(); if (pid2 == -1) { return -1; } if (pid2 == 0) { // CHILD if ((close(1)) < 0) { return -1; } if ((dup(fd[1])) < 0) { return -1; } if ((close(fd[0])) < 0) { return -1; } if((execvp(params1[0], params1)) == -1) { fprintf(stdout,"%s: Unknown command\n", params1[0]); break; } exit(0); } else { // PARENT if ((close(0)) < 0) { return -1; } if ((dup(fd[0])) < 0) { return -1; } if ((close(fd[1])) < 0) { return -1; } if((execvp(params2[0], params2)) == -1) { fprintf(stdout,"%s: Unknown command\n", params1[0]); break; } wait(0); } exit(0); } else { // PARENT wait(0); } |
modbreak: gebruik aub zelf [code=c] tags om je code leesbaar te houden, scheelt mij werk
[ Voor 10% gewijzigd door curry684 op 02-03-2004 16:54 ]