0
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)

4

3 回答 3

5

您正在尝试在以下位置修改字符串文字:

strcat("/",command)

这会导致未定义的行为。

strcat 的声明是:

char * strcat ( char * destination, const char * source );

并将源字符串的副本附加到目标字符串。

于 2012-11-05T18:21:58.137 回答
2

问:为什么不输入“if pid == 0”)?

A:应该是这样的:)

两个建议:

1) 在调试器下单步执行,在调用“execl()”之前查看“路径”是什么。我想你会感到惊讶。

2) 请务必检查代码中“execl()”的错误状态。永远不要假设它不会失败,如果确实如此,请确保打印有意义的错误消息(和/或优雅地恢复)。

于 2012-11-05T18:24:38.707 回答
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);

我认为这应该可以解决问题。

于 2012-11-05T18:29:24.713 回答