GNU/Linux >> Linux の 問題 >  >> Linux

c で Linux パイプラインの例を作成する方法

これを試してください:

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

int main(int argc, char** argv)
{
 int pipefd[2];
 int childpid,childpid2;
 char* cmd[3]={"ls",NULL,NULL};
 char* cmd2[3]={"grep",".c",NULL};
 pipe(pipefd);
 if(childpid=fork()){
   //parent
   close(pipefd[1]);
   dup2(pipefd[0],STDIN_FILENO);
   execvp("grep",cmd2);
 }else{  
   //child
   //write
   close(pipefd[0]);
   dup2(pipefd[1],STDOUT_FILENO);
   execvp("ls", cmd);
 }
 return 0;
}

実際、プログラムはすぐに終了します — 実際、親プロセスは前に終了します。 子が実行されるため、"test.c" の前にシェル プロンプトが表示されます。

これを親に追加することで、少し改善できます:

wait(childpid);
wait(childpid2);

これにより、両方の子の後に親が終了します。


Linux
  1. Linuxコマンドのスクリプトを作成する方法

  2. LinuxRPMパッケージを作成する方法

  3. Linux でスレッドを作成する方法 (C サンプル プログラムを使用)

  1. Linuxでスワップを作成する方法

  2. LinuxでSystemdサービスを作成する方法

  3. Linuxでスワップファイルを作成する方法

  1. Linuxでパーティションを作成する方法

  2. Linuxでカスタムrpmリポジトリを作成する方法

  3. Ansibleを使用してLinuxユーザーを作成する方法