Podmiana kodu procesu i przekierowanie standardowego wyjścia

0

Cześć, mam pewien problem. Chciałbym wywołać komendę systemową pod linuxem z poziomu programu za pomocą funkcji execl() i przekierować to co wypluje ta komenda za pomocą dup2() do procesu macierzystego.

Plan jest taki:
-tworzę tablicę deskryptorów
-wywołuję pipie()
-wywołuję fork()
-w procesie potomnym podmieniam kod za pomocą execl()

No i pasowałoby mi jeszcze w zależności od procesu zamknąć deskryptor piszący, lub czytający + podpiąć używająć dup2() zamiast standardowego wyjścia. < problem jest taki że jeżeli wywołam sobie funkcje execl to zmienia się cały kod procesu, więc nie mam jak zrobić tych 2 rzeczy.

0

za pomocą funkcji execl

Ekspertem nie jestem, ale chyba po prostu nie możesz bo ta funkcja podmienia aktualny proces na ten nowy i tyle. Czemu nie użyjesz jakiegoś popen?

0

Nie jest to mój wymysł, mam odgórnie narzucone fork, exec, pipe i dup2.

0

Tak sobie myśle, że mógłbyś przed exec podmienić STDOUT tego potomnego procesu na STDIN twojego procesu-rodzica (albo na jakiś inny deskryptor z którego mozesz tam czytać) i dopiero potem zrobić exec. Ten deskryptor powinien pozostać niezmieniony więc nowy proces będzie pisał na swoje STDOUT które w rzeczywistości będzie można odczytać z twojego procesu-rodzica.

0

Jak @Shalom pisze, duplikujesz i zamykasz deskryptory przed wywołaniem funkcji z rodziny exec.

BTW, rozumiem, że to pewnie przykład dydaktyczny, ale masz świadomość, że program socat raczej już to wszystko potrafi? ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1