[c++]uruchamianie programu w programie
- none
- 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
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
- moridin
- 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
Z manuala do exec'a:none pisze:Znalazłem funkcje execle(); ale ona zwraca int, a szukam funkcji która poda mi wyjście programu.
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.
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]
http://scripts-zone.info/
[AMD Duron(tm) 999.348 MHz | 503.4 SDR | Gigabyte GeForce 7600 GS 512 DDR2]
http://scripts-zone.info/
- el.pescado
- 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
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.
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.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości