int status=0;
int PID = fork();
if(PID == 0)
{
char *path = strcat(pathToken,strcat("/",command));
printf("path: %s\n",path);
execl(path,command,"-l",NULL);
}
else if(PID>0)
{
printf("pid: %d. ",PID);
printf("I'm parent process\n");
wait(&status);
}
输出:
pid: 20027. I'm parent process
为什么它不输入if(PID==0)
?
答案 0 :(得分:5)
您正尝试修改字符串文字:
strcat("/",command)
导致未定义的行为。
strcat的声明是:
char * strcat ( char * destination, const char * source );
它将源字符串的副本附加到目标字符串。
答案 1 :(得分:2)
问:为什么不输入“if pid == 0”)?
答:它可能会:)
两个建议:
1)在调试器下单步执行并在调用“execl()”之前查看“path”。我想你会感到惊讶。
2)务必检查代码中“execl()”的错误状态。永远不要认为它不会失败,并确保打印出有意义的错误消息(和/或优雅地恢复),如果确实如此。
答案 2 :(得分:1)
尝试更改此行
char *path = strcat(pathToken,strcat("/",command));
到
char * path = malloc(strlen(pathtoken) +
strlen(command) + 2); /* 1 for null + one for / */
strcpy(path, pathToken);
strcat(path, "/");
strcat(path, command);
我认为应该解决这个问题。