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