我已經寫了孩子的命令執行代碼爲Win32:使用的CreateProcess調用exec *函數用一個命令參數儘可能與CreateProcess的
CreateProcessW(NULL, // app
&commandW[0], // command line
NULL, // process security attributes
NULL, // primary thread security attributes
TRUE, // handles are inherited
0, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&startup_info, // STARTUPINFOW pointer
&process_info); // receives PROCESS_INFORMATION
它使用一個「絕招」,並在第二個參數把整個命令,通常只包含傳遞給程序的參數。我想爲POSIX做同樣的事情,但同樣的「詭計」不適用於execlp
函數(我也打賭其他所有函數)。有什麼方法可以繼續使用單一的std::string command
並啓動一個流程?將命令分割爲可執行文件名和參數是可能的,但如果可能的話,我會盡量避免大量工作。
我知道我的「設計缺陷」。所有這些都是執行生成的編譯器調用字符串。 Quotes等已經在生成的'string'中正確設置。 – rubenvb
真正的設計缺陷(恕我直言)在Windows'CreateProcess'調用。但是如果你確定你的字符串是安全的,產生一個shell應該可以工作(並且會使其工作非常類似於Windows) –
請注意,這正是['system'](http://pubs.opengroup.org/ onlinepubs/9699919799/functions/system.html)。 – ecatmur