1

だから私はCに不慣れで、これは私が抱えていて理解できない問題の1つです。まず、execlp() は、名前だけで (検索して) パラメータを指定してプログラムを実行します。ここで、"-u" をパラメーターとして "who" を実行したいのですが、execlp から何も返されません。なんで?これは正常ですか?

    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>

    main()
    {
        int j = 0;
        if(fork() == 0)
        {
            j++;
            if(execlp("who", "who", "-u", (char*)0) == -1)
            {
                j++;
            }
            else
            {
                printf("\nStoinostta na j = %d", j);
                return;
            }
        }   
        else
        {
            --j;
            printf("\nStoinostta na j=%d", j);
        }
        printf("\nStoinostta na j ravno na %d", ++j);
    }
4

3 に答える 3

6

成功すると、現在のプロセスを指定したコマンドにexeclp 置き換えます。失敗した場合のみ戻ります。マンページでこれを明確にする必要があります。

于 2013-06-12T05:25:19.247 に答える
3

@Charles Bailey が指摘したようにexeclp()、現在のプロセスを置き換えます。したがって、プログラムを実行した後に戻ることはありません。

何かを実行したいだけの場合、簡単な方法は次のsystem()とおりです。http://linux.die.net/man/3/system

何かを実行して入出力を制御し、おそらくコマンドからの出力を収集したい場合、良い方法は次のとおりですpopen(): http://linux.die.net/man/3/popen

于 2013-06-12T05:30:02.487 に答える
2

おそらくあなたはそのsystem機能を望んでいます。別のプログラムを実行してから戻ります。

別のオプションはexec、呼び出した後にすることforkです。

fork() || execlp(...);
于 2013-06-12T05:29:15.313 に答える