Użyj polecenia popen
, jeśli chcesz uruchomić polecenie powłoki i chcesz, aby proces nadrzędny mógł rozmawiać z dzieckiem. (Przechwytuje dane wejściowe lub wyjściowe dziecka do strumienia, który otrzymujesz.) W przeciwnym razie wybierz rodzinę funkcji (prawdopodobnie w połączeniu z fork
); exec
Procesy "d" dziedziczą większość otwartych deskryptorów plików (w tym stdin, stdout i stderr), dzięki czemu można przechwytywać dane wyjściowe i na dowolne wyjście ... a ponadto ma to mniejszy wpływ na bezpieczeństwo.
system
na ogół najlepiej unikać, chyba że musisz uruchamiać polecenia powłoki. Tworzy powłokę, aby uruchomić polecenie, a powłoka może analizować komendę w dowolny sposób. W szczególności niektóre zmienne środowiskowe (takie jak $IFS
i/lub $PATH
) mogą być modyfikowane w taki sposób, aby spowodować, że rodzic wykona programy, do których nigdy nie był przeznaczony. Chociaż wydaje się, że popen
robi to samo, to przynajmniej zapewnia funkcjonalność, która sprawia, że jest to warte w ogólnym przypadku.
'man popen' and' man system'? –
Czy próbowałeś użyć funkcji popen()? lub jego problem z tobą binarnym? Ostatnia edycja jest nieco myląca – henryyao
Używanie 'popen' zamiast' system' nie pomaga w twoim rzeczywistym problemie: proces utknął. – Wolf