[ Mirko Rajkovača @ 19.10.2006. 13:23 ] @
koja c++ funkcija pod linuksom je ekvivalent shellExecute pod windowsom? Znaci da jednostavno startuje program, a ne da kreira child proces
[ Buffy @ 19.10.2006. 13:44 ] @
mozes pomocu system funkcije:
Code:

#include <stdlib.h>

...

system("program &"); //obrati paznju na "&". kad uneses ovaj znak tred is kojeg si pozvao system funkciju nece biti blokiran.
...

dakle obavezno stavi &.
ima i drugih nacina za pokretanje programa, ali ovo ti je dovoljno ;)
pozdrav!
[ Mirko Rajkovača @ 23.10.2006. 11:20 ] @
To je to, radi!

Tnx
[ cynique @ 23.10.2006. 12:22 ] @
Za finiju kontrolu, pogledaj exec* familiju fja:

http://www.opengroup.org/onlinepubs/009695399/functions/exec.html
[ EArthquake @ 10.11.2006. 16:38 ] @
samo da napomenem


postoji sigurnosni problem kod system() funkcije

naime , ona se oslanja na varijable okruzenja pri pokretanju programa , tacnije na $PATH varijablu po kojoj trazi program koji treba da pokrene

tako da , osim ako ne stavljas fulll path do programa, neko moze da se poigra i da natera tvoj program da radi nesto drugo ,

to i nije veliki problem , osim ako tvoj program nije suid , onda omogucava pokretanje bilo kog drugog programa sa visi privilegijama , a to je vec ozbilja n sigurnosni propust


mozda nebitno , al reko da napomenem, ne moz` da skodi :)


pozdrav
Aca


[ Mirko Rajkovača @ 11.11.2006. 15:16 ] @
sada imam drugi problem, radi ovo sa system ali je problem sto se novi proces i dalje tretira kao child od pocetnog procesa, tj. prvobitan program nece da se zavrsi dok se program pokrenut sa "system" ne zavrsi a to mi nikako ne odgovara...
Tacna situacija je ovakva: imam broker program koji komunicira sa server aplikacijom, ako server nije startovan broker startuje server komunicira sa njim i zatvara se dok server ostaje aktivan i ceka narednog brokera

Jednostavno mi treba zamena za ShellExecute pod Windowsom pogledao sam svugde ali nisam nasao, svaka ideja je dobro dosla...
Hvala unapred
[ Buffy @ 11.11.2006. 15:42 ] @
moze li exec?
[ mulaz @ 11.11.2006. 16:10 ] @
dali exec i system vracaju output programa?
mislim da je funkcija system tipa int, i da vraca samo 0 ako je program uspesno odradio ili nesto ako nije
jel moguce piokupiti izlaz programa? mislim.. ako exece pokrene komandu ls, da bi pokupio listu foldera/fajlova?
[ EArthquake @ 12.11.2006. 21:43 ] @
ne , exec familija funkcija pokrece program , ne mozes da uzmes njegov output, on se ponasa kao da nije child ,

znaci ls samo ispisuje sve na stdout
[ Mirko Rajkovača @ 13.11.2006. 23:29 ] @
Ja mozda ne razumem ali u manualu za exec familiju funkcija lepo i jasno pise da stvara proces koji zamenjuje tekuci proces ili tako nesto, znaci ne izvrsava samo prosto startovanje programa. Ili ja lose razumem ili to nije to(verovatno je ovo prvo )

Ako vam nije problem dajte mi jedan primer, znaci jednostavno startovanje aplikacije, njena dalja kontrola mi nije bitna a komunikacija se odvija preko pipe-ova

Hvala
[ mbabuskov @ 02.02.2007. 21:11 ] @
Za kupljenje izlaza (stdout) programa najlakse je koristiti popen(3) pa onda sa fgets(3) ili fread(3) citati.

Ili napraviti FIFO (pomocu mkfifo(1)) pa citati iz njega (pod uslovom da program pise tamo).

Sto se tice toga da procesor bude child, na Linuxu svaki proces mora imati parenta. Ako neces da ti proces bude child onoga koji ga je kreirao, mozes eventualno da prebacis da ti parent bude sam init. Verovatno bas to i zelis. Pogledaj daemon(3) za vise detalja.
[ NastyBoy @ 03.02.2007. 12:10 ] @
Citat:
Ja mozda ne razumem ali u manualu za exec familiju funkcija lepo i jasno pise da stvara proces koji zamenjuje tekuci proces ili tako nesto, znaci ne izvrsava samo prosto startovanje programa. Ili ja lose razumem ili to nije to(verovatno je ovo prvo )

To jeste tako kako pishe. Stvari na *nixu rade malo drugachije od Win-a. exec familija funkcija zamenjuje image trenutnog procesa novim procesom.

Standardni nachin da na *nix-u startujesh eksterni proces bi bio da koristish fork/exec bateriju, eventualno u saradnji sa waitpid() da bi sachekao da se proces zavrshi i pokupio izlaznu vrednost.