![](/img/trans.png)
[英]How can I execute cat command using execvp or other kinds of exec functions in programming C
[英]c programming using execvp
我正在一個副項目上,我想生成5個子進程,然后將execvp放入另一個名為isEven的程序中,該程序將告訴傳遞給它的數字是否為偶數。 但是,當我在gdb中運行execvp調用時,它始終失敗,並且不執行。 Args和load(args)都在另一個函數中調用。
提前致謝!!!
//Code to load binary
void load(char* args[])
{
execvp("./isEven", args);
printf("ERROR\n");
}
//args being passed in
char *args[] = {"./isEven", number, NULL};
load(args);
這是我寫的一個較小的程序,它執行與現在相同的操作。 Gdb說我遇到了分段錯誤。
int main(int argc, char *argv[])
{
int returnCode = fork();
if(returnCode == 0)
{
char *args[] = {"./isEven", 12345, NULL};
execvp("./isEven", args);
printf(errno);
printf("ERROR: execvp failed\n");
exit(-1);
}
else if(returnCode < 0)
{
fprintf(stderr, "fork failed\n");
}
else
{
//i am the parent
printf("I am the parent");
}
return 1;
}
主要問題在於此行:
char *args[] = {"./isEven", 12345, NULL};
傳遞給execvp
的args
必須是char*
的數組。 使用12345
作為參數會使它解釋為地址,並且不太可能是有效地址。 無論如何,這不是您想要通過的。 這樣:
char *args[] = {"./isEven", "12345", NULL};
您需要將number
轉換為字符串。 例如:
int number = 12345;
char num_str[256];
snprintf(num_str, sizeof num_str, "%d", number);
char *args[] = {"./isEven", num_str, NULL};
execvp("./isEven", args);
perror("exec");
在修改后的示例中,您將errno
打印為:
printf(errno);
這將失敗,因為printf
期望將字符串作為其第一個參數。 您可以使用perror()
打印錯誤,如上所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.