2016-03-28 12 views
1

次のLinuxコマンドを実行する必要があります:ls -la |並べ替え| -lトイレと私はexecの機能を使用する必要が...ここに私のコードです:C Linuxコマンドとパイプでexecを使用する方法

x = fork(); 

char * args[] = { "ls", "-la" , "|", "sort" , "|" , "wc", "-l" }; 

if(x == 0){ //Father  
//Dad validations 


}else{  

    execlp(args[0],args[0], args[1],args[2],args[3],args[4],args[5],args[6], NULL); 
    perror("Exec error\n"); 

    exit(1); 
} 

コマンドが正常に分離動作しますが、私はそれらを一緒に入れたとき、私は、このエラーメッセージが出ます:

ls: cannot access |: No such file or directory 

    ls: cannot access sort: No such file or directory 

を私はエラーがLinuxパイプにあると思う。

ありがとう!代わりに、次の引数を実行

+0

'exec(lp)'はシェル構文を想定していないため、プロセス名とその引数が必要です。 –

+0

でも、Linuxコマンドでexecを使用することができます。これは私のものです。 – Joseph

答えて

2

試してみてください。

char * args[] = { "bash", "-c" , "ls -la | sort | wc -l" }; 

使用するパイプの構文(および別のプロセスからの出力の結果配管が)実際にシェルの機能であるため、これが必要です。したがって、このようにフォーマットされたコマンドexeclpを実行できるようにするには、シェル(この場合はbash)を実行し、コマンドに-cフラグを持つ文字列としてコマンドを提供する必要があります。

+0

@sjlなぜこれで彼の問題が解決されると思うのでしょうか(とexeclpに渡される引数の数を変更する必要があるかもしれません) –

+0

@slj私の間違い...それは100%働いた、ありがとう!私はちょうど私のコードをreajustしなければならなかった – Joseph

+0

sjlの下投票を削除してください、それは働いた – Joseph

関連する問題