Portál AbcLinuxu, 11. května 2025 10:14
Toto je asi lahka otazka, ale nejak ma nenapada ako spratit tuto vec.
Z programu pisaneho v cecku, potrebujem spustit externy prikaz a dostat jeho vystup (text) spat do programu.
Nenapada niekoho ako by som to mohol urobit? K mojemu prekvapeniu som zistil ze funkciu system () na to pouzit nemozem, lebo ta len vracia navratovu hodnutu.
Dik.
pipe
OK ale kam to mam redirectnut?
Ide o to ze program bude stusteny napr aj hodinu. A taketo prikazy bude spustat a spracovavat ich vystupy. Potrebujem nieco ako funkciu system s tym rozdielom ze mi na miesto navratovej hodnoty vrati retazec v ktorom bude vystup programu. Nenamada ma ako by sa toto dalo spravit pomocou pipe .
program
....cout<<"neco";.....
program|cat ??
man pipe
OK, rozumiem. Este si chcem overit ci to pojde takto :
//vytvorim pipe s dvoma descriptormi
FILE * pipedescr [2]; pipe (pipedescr);
//potom
sprintf(command,"command &%d",(int)pipedescr[1]);
system(command);
//potom citam.
fgets ();
toto mi vracia
sh: Syntax error: "&" unexpected
ako mam predat ten desktriptor tomu spustanemu programu?
int pipe(int pipefd[2]);
vytvori pipefd[0]
pro cteni a pipefd[1]
pro zapis
pak udelas fork()
v potomkovi pomoci int dup2(int oldfd, int newfd);
udelas kopii pipefd[1]
(oldfd) do stdout(newfd) a pres exec*()
spustis program
v rodici pak ctes z pipefd[0] co potomek posila na stdout - ktery je ale "presmerovany" do pipefd[1]
konkretni reseni se da najit googlem za pouziti vyse uvedenych klicovych slov
Diky za odpoved. Idem to vyskusat.
Este sa chcem opytat, ze ked potomok skonci? Zatvori sa rura sama? Resp. Ako rodic zisti, ze do rury uz nikto zapisovat nebude. Bude tam EOF alebo nieco take?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.