[so] [Tema 1] pipe

Lucian Cojocar cojocar at gmail.com
Fri Mar 12 18:00:01 EET 2010


Ciprian Mihai Coman wrote:
> Salut,
> 
> Imi poate explica cineva cum se creaza un pipe intre doua procese pentru
> STDOUT -> STDIN. Eu am facut ceva de genul (exemplu pentru ls | grep h):
> 
> pipe(fd);
> fork
>     close(fd[1])
>     dup2(fd[0], stdin)
>     executa grep
>     close(fd[0])
>     exit
> close(fd[0])
> dup2(fd[1],stdout)
> executa ls
> close(fd[1])
> waitpid(proces fork)
> 
> Problema este ca nu se termina grep. Aparent stdout din parinte ramane
> redirectat catre copil si dupa ce inchid ambele capete ale pipe-ului din
> parinte (cout << "here" rezulta in printarea "here" in copil).
> 
Funcția exec* nu iese niciodată în caz de succes. Ea înlocuiește 
imaginea procesului curent. Așa că ce e dupa ea nu se execută niciodată. 
Practic rămâi fară părinte. Ai putea să faci două forkuri, și, în 
parinte, să aștepți ambele procese.

Adică rămâi cu grep deschis, ceea ce e normal.

Lucian


More information about the so mailing list