![](/img/trans.png)
[英]Is there a way to determine the "grandchild" pid_t of a process spawned with "sh -c"?
[英]Passing arguments to a spawned process does not work in C
我需要將兩個地址(32位)傳遞給C的execl命令產生的進程,如下所示。 在第一個程序中:
char buffer[18];
sprintf (&buffer[0],"%x\0 %x\0",lock, count);
arg_list[0]=&(buffer[0]);
arg_list[1]=&(buffer[10]);
execl ("/somedirectory/second_process", arg_list[0], arg_list[1], NULL);
然后在我的第二個程序中,我嘗試解析地址,如下所示:
if (argc != 2) {
printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc);
return -1;
}
if ( !(sscanf (argv[1],"%x",&lock)) || !(sscanf (argv[2],"%x",&count)) ) {
printf ("PROCESS 2: Problem with parameters passed in");
return -1;
但是我的程序不斷給出錯誤,指出傳入的參數無效。 當我嘗試打印出收到的參數時,我的程序掛起。
printf ("The arguments passsed in are %s %s", argv[1], argv[2]);
固定:
我錯誤地執行了execl調用。 應該是:
execl ("/somedirectory/second_process", "second_process" arg_list[0], arg_list[1], NULL);
同樣在過程2中:
if (argc != 3) {
printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc);
return -1;
}
由於傳入的第一個參數應該是進程名稱,如Chris所建議的那樣。
謝謝!
數組總是基於C的0,因此您的兩個參數將分別為argv[0]
和argv[1]
,而argv[2]
將為空指針,因此sscanf將失敗,崩潰或掛起。
現在, 通常您應該始終將程序名稱作為第一個( argv[0]
)參數傳遞。 所以你要:
execl ("/somedirectory/second_process", "second_process", arg_list[0], arg_list[1], NULL);
也就是說,您實際上應該傳遞三個參數(因此在第二個程序中argc == 3
)。
在您的情況下, argc
將為三個。 執行文件的名稱始終是第一個參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.