GNU/Linux >> Znalost Linux >  >> Linux

Jak vytvořit příklad linuxového potrubí v c

Zkuste toto:

#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;
}

Ve skutečnosti se program ukončí okamžitě – ve skutečnosti se nadřazený proces ukončí před děti běží, což je důvod, proč je před "test.c" výzva shellu.

Věci můžete trochu vylepšit přidáním tohoto do rodiče:

wait(childpid);
wait(childpid2);

což způsobí, že rodič skončí po obou dětech.


Linux
  1. Jak vytvořit skript příkazu Linux

  2. Jak vytvořit balíček RPM pro Linux

  3. Jak vytvořit swap v Linuxu

  1. Jak vytvořit službu Systemd v Linuxu

  2. Jak vytvořit odkládací soubor v Linuxu

  3. Jak vytvořit uživatele Linuxu pomocí Ansible

  1. Jak vytvořit oddíly v Linuxu

  2. Jak vytvořit vlastní úložiště rpm na Linuxu

  3. Jak vytvářet vlákna v Linuxu (pomocí ukázkového programu C)