[c++]uruchamianie programu w programie

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
none
Sędziwy Jeż
Sędziwy Jeż
Posty: 60
Rejestracja: 12 wrz 2007, 18:11
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: LXDE

[c++]uruchamianie programu w programie

Post autor: none »

Witam mam pytanie jakiej funkcji mam użyć by odczytać wyjsćie programu uruchamianego w programie. Znalazłem funkcje execle(); ale ona zwraca int, a szukam funkcji która poda mi wyjście programu.
%55%62%75%6E%74%75%20%26%20%44%65%62%69%61%6E%20%75%73%65%72%2C%20%6D%79%20%67%67%3A%31%30%30%33%30%39%38%38
Awatar użytkownika
moridin
Sędziwy Jeż
Sędziwy Jeż
Posty: 57
Rejestracja: 06 gru 2008, 15:21
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [c++]uruchamianie programu w programie

Post autor: moridin »

none pisze:Znalazłem funkcje execle(); ale ona zwraca int, a szukam funkcji która poda mi wyjście programu.
Z manuala do exec'a:

Kod: Zaznacz cały

WARTOŚĆ ZWRACANA
Jeśli dowolna z funkcji exec powróci, oznacza to że nastąpił błąd. Zwracana jest wartość -1 i ustawiana jest zmienna globalna errno aby wskazać błąd.
Dawno nie pisalem bezposrednio na linucha ale sprobuje pomoc.
Pamietam ze sama funkcja z rodziny exec nic nie da. Trzeba uzyc tak zwanej komunikacji miedzyprocesowej. Mamy tu do wyboru sporo mozliwosci: pamiec wspoldzielona, semafory procesow, odwzorowanie w pamieci, potoki, gniazda czy tez chocby zwykle pliki. Powinienes na ten temat poczytac.

Tutaj na szybko znaleziony program w c dla potokow (pipe):
http://www.cs.usfca.edu/~benson/cs326/l ... ipe-exec.c
May the Source Be With You!
[AMD Duron(tm) 999.348 MHz | 503.4 SDR | Gigabyte GeForce 7600 GS 512 DDR2] :-P
http://scripts-zone.info/
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [c++]uruchamianie programu w programie

Post autor: el.pescado »

Po pierwsze, funkcje z rodziny exec() w ogóle nie zwracają wartości - funkcje te uruchamiają nowy proces w miejscu bieżącego procesu, tak więc kontrola nigdy (chyba że wystąpi błąd) nie wraca do punktu wywołania funkcji exec().

Jeżeli chcesz po prostu odczytać wyjście (albo pisać do wejścia) innego procesu, bez wchodzenia w szczegóły, najprościej jest posłużyć się funkcjami popen(3)/pclose(3) ze standardowej biblioteki języka C. popen zwraca wskaźnik do strumienia, z którego korzytsa się dokładnie tak, jakby to był plik otwarty za pomocą funkcji fopen.

Natomiast jeżeli wystarczy sam kod zakończenia programu (tj. wartość zwrócona przez funkcję main tego programu), można użyć funkcji system(3), również znajdującą się w standardowej bibliotece języka C.

Jeżeli nie chcesz korzystać ze standardowej biblioteki języka C, a wolisz wywołania systemowe POSIX, poczytaj o funkcjach fork(2), exec(2), pipe(2), dup2(2) - ogólnie, jest z tym trochę więcej roboty.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości