我想從我的C程序運行一個csh
命令。我這樣做是使用下面的代碼:從內部運行csh c
char *csh_command[3];
...
csh_command[2]=(char*)malloc((length_command+strlen("\"\""))*sizeof(char));
csh_command[0]=(char*)malloc((strlen("-f")+1)*sizeof(char));
csh_command[1]=(char*)malloc((strlen("-c")+1)*sizeof(char));
strcat (csh_command[0],"-f");
strcat (csh_command[1],"-c");
strcat (csh_command[2],"\"");
strcat (csh_command[2],full_command);
strcat (csh_command[2],"\"");
pid=fork();
if (pid == 0){
execvp("csh", csh_command);
}
什麼,我在這裏做的是創建一個包含參數數組的csh
: -f,-c「[運行命令]」
但結果不是預期的結果。子進程只是在後臺運行,不做任何事情。
我們試着運行ls | wc -l
使用它。
問題在哪裏?
編輯:
的length_command
變量已經爲\0
+1。問題是數組未在NULL
中終止。並且"
是不必要的。
請不要寫關於不投射「malloc」的結果。我意識到這一點,仍然選擇這樣做。 – SIMEL 2011-04-15 18:28:05
我想傳遞給execvp的參數數組必須以'NULL'指針結束? – 2011-04-15 18:30:37
'csh_command'是否包含您期望擁有的字符串? 'sizeof(char)'是1,所以不需要在'malloc'中乘它? – Mahesh 2011-04-15 18:31:11