2

プログラム:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
        int cpid=fork();
        if(cpid==0){
                execl("/bin/ls","ls","-lah","--color",NULL);
        }
        else{
                int status;
                waitpid(cpid,&status,0);
                if(status!=0)
                        printf("Error Occured\n");
        }
return 0;
}

出力:

$ ./a.out 
total 20K
drwxrwxr-x 1 guest guest 4.0K Jan 12 15:21 .
drwxrwxr-x 1 guest guest 4.0K Jan 12 15:21 ..
-rwxrwxr-x 1 guest guest 7.2K Jan 12 15:19 a.out
-rw-rw-r-- 1 guest guest  372 Jan 12 15:20 execl.c
$ 

上記のプログラムでは、親が子を作成し、子が ls コマンドを実行します。しかし、私の要件は ls の出力を親の配列に保存することです。これを行う方法はありますか。

4

2 に答える 2

3

exec*()ファミリー関数は、現在のプロセスのイメージを新しいものに置き換えます。だから直接読めない。外部コマンドからの出力を読み取るために子プロセスは必要ありません。popen()それを達成するために使用できます。

子プロセスを作成する必要がある場合は、 を使用pipe(2)して子プロセスからの出力を読み取ることができます。リンクされたマニュアルページで簡単な例を見つけることができます。

于 2016-01-12T10:00:16.617 に答える