0

プロセスをフォークし、wcを使用してコマンドを実行していexeclます。正しい引数の下では正常に動作しますが、間違ったファイル名を指定すると失敗しますが、どちらの場合も戻り値 WEXITSTATUS(status) は常に 0 です。

私がしていることには何か問題があると思いますが、何が悪いのかわかりません。man ページと Google を読むと、ステータス コードに従って正しい値を取得する必要があることが示唆されています。

これが私のコードです:

#include <iostream>
#include <unistd.h>

int main(int argc, const char * argv[])
{
    pid_t pid = fork();
    if(pid <0){
        printf("error condition");
    } else if(pid == 0) {
        printf("child process");
        execl("/usr/bin/wc", "wc", "-l", "/Users/gabbi/learning/test/xyz.st",NULL);
        printf("this happened");
    } else {
        int status;
        wait(&status);

        if( WIFEXITED( status ) ) {
            std::cout << "Child terminated normally" << std::endl;
            printf("exit status is %d",WEXITSTATUS(status));
            return 0;
        } else {     
        }
    }
}
4

3 に答える 3

0

argv から子プロセスにファイル名を渡していない

それ以外の

 execl("/usr/bin/wc", "wc", "-l", "/Users/gabbi/learning/test/xyz.st",NULL);

これを試して、

 execl("/usr/bin/wc", "wc", "-l", argv[1],NULL);

マシンで得た出力

xxx@MyUbuntu:~/cpp$ ./a.out test.txt 
6 test.txt
Child terminated normally
exit status is 0

xxx@MyUbuntu:~/cpp$ ./a.out /test.txt 
wc: /test.txt: No such file or directory
Child terminated normally
exit status is 1
于 2013-10-03T07:33:05.530 に答える