enviroment

Miloš happz na volny.cz
Pondělí Březen 6 13:35:51 CET 2000


From: checkbow <checkbow na cha601a>
Date: 6. března 2000 13:01


Zdravim.

>> Pro nastaveni roury pro komunikaci se pouzije nasledujici postup
>> (velmi zhruba):
>>
>> Pres pipe() utvorim rouru (dostanu oba konce roury)
>> Po fork() provede child process neco jako
>> dup2(prvni_roura,fileno(stdin));
>> dup2(druha_roura,fileno(stdout));
>to dup2 jsem nevedel dik
>> execve(...);
>>
>> No a za pomoci opacnych koncu roury mohu komunikovat.
>
>no a prave o to mi celou dobu jde
>FILE *pip;
>pip=fdopen(prvni_roura,"r+");
>                                  ^^^^ nemam problem tady ?
>        jak lze otevrit rouru -  jde to takhle obousmerne ????
>protoze pri pokusu o
>fprintf(pip,"neco");
> = zapis do roury mi program spadne
>
>newite co je spatne ?


Vim. Kdyz otevrete pip pro cteni, tak do ni nemuzete psat ani pres fprintf.
Chce to asi tohle:

int pipes_in[2], pipes_out[2];

pipe(pipes_in); pipe(pipes_out[]); /* otevreni rour */
fork();
dup2(pipes_in[0], STDIN_FILENO);
cteci cast prvni trubky pripojite na stdin potomka

dup2(pipes_out[1], STDIN_FILENO);
zapisovaci cast pipes_out pripojite na stdout potomka

execve(...);

A pak se da v potomkovi normalne pouzivat printf, scanf a podobne, protoze
je mu srdecne jedno, kam jeho data putuji a jak. Nemusite ani nijak otvirat
nejaky jiny stream - to je zajisteno dup2.

Milos Prchlik

P.S.: Vyborna vec je info libc - tam se da najit spousta veci.




Další informace o konferenci Linux