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

Q:「ifpid == 0」と入力しないのはなぜですか?

A:おそらくそうです:)

2つの提案:

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 に答える