我想使用fork()來產生我的程序中的新進程。新進程只有一項任務:將鼠標輸入重定向到串行端口。我已經在終端窗口中成功測試了以下命令:hexdump/dev/input/mice>/dev/ttyS0使用fork()和execl()輸出重定向
到目前爲止,我設法使用fork來創建子進程,但是我的問題是我似乎無法讓我的EXECL()方法才能正常工作:
execl("/usr/bin/hexdump", "hexdump", "/dev/input/mice > /dev/ttyS0", (char*) NULL);
我已經試過其他變體也,就像這樣:
execl("/usr/bin/hexdump", "hexdump", "/dev/input/mice", ">", "/dev/ttyS0", (char*) NULL);
但總是以相同的結果,出口值1(一般錯誤)。
還值得一提的是,我已經設法使用popen()方法工作,您可以在其中完全按照您在終端中所做的那樣鍵入命令。 popen()的問題是我沒有找到終止這個過程的好方法。 叉()我得到的PID,並可以通過終止進程:
kill(pid, SIGKILL);
這是一個要求,因爲我必須能夠停止和重新啓動輸出重定向爲所需的程序運行時。
就像一個魅力。非常感謝你!只是一個簡短的問題:在殺死進程之前是否需要關閉文件描述符,還是在進程被終止時自動關閉? – Hippo
當孩子死亡時,向孩子開放的文件描述符會關閉,就像任何進程一樣。如果你注意到上面的內容,我會在'if'的主體中打開'/ dev/ttyS0',這樣只有孩子有'/ dev/ttyS0'的打開文件描述符。所以,當你殺死孩子時,該fd關閉。 –