1 #include <unistd.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4
5 int main(int argc, char** argv) {
6
7 int fds[2];
8
9 pipe(fds);
10
11 if(!fork()) { //child
12 close(fds[0]);
13 dup2(fds[1] /*write descritor*/, 1 /*stdout*/);
14 execlp("ls", "ls", NULL);
15 } else {
16 close(fds[1]);
17 dup2(fds[0], 0);
18 execlp("wc", "wc", "-l", NULL);
19 }
20 return 0;
21 }
Pytanie:
Dlaczego w linijce 16 jeżeli close zostanie zakomentowane to program nie działa ? Wydawało mi się, że ten close jest dla "estetyki i poprawności", a jednak program się nie kończy i "wisi" gdy jest ta linijka zakomentowana. Gdy ją odkomentuję to program działa poprawnie tzn, jak zestaw poleceń ls | wc -l. Zechciał by ktoś wyjaśnić mi skąd takie zachowanie ?