无法在C ++中使用fork()和pipes()编译演示程序

时间:2016-03-26 00:39:18

标签: c++

所有,我的家庭作业的第一部分只是一个演示程序,我需要编译,然后修改。它是由老师提供的,但我根本无法使用g ++进行编译。我将在作业结束时创建一个make文件,但目前我只是试图测试它,并且没有运气。我尝试过最基本的g ++命令:g ++ -o main TwoPipesTwoChildren.cpp。有人可以帮忙吗?我甚至无法开始这项工作,直到我能够开始工作。

// description: This program will execute "ls -ltr | grep 3376"
// by using a parent and child process

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char **argv){
   printf("TEST");
   int status;
   int childpid;
   char *cat_args[] = {"ls", "-ltr", NULL};
   char *grep_args[] = {"grep", "3376", NULL};

   // create one pipe to send the output of "ls" process to "grep" process
   int pipes[2];
   pipe(pipes);

   // fork the first child (to execute cat)
   if((childpid = fork()) == -1)
   {
      perror("Error creating a child process");
      exit(1);
   }

   // replace cat's stdout with write part of 1st pipe
   if (childpid == 0)
   {
      dup2(pipes[1], 1);
      printf("AFTER FORK CHILD");

      //close all pipes (very important!); end we're using was safely copied
      close(pipes[0]);
      close(pipes[1]);
      execvp(*cat_args, cat_args);
      exit(0);
   }

   else
   {
      // replace grep's stdin with read end of 1st pipe
      dup2(pipes[0], 0);
      close(pipes[0]);
      close(pipes[1]);
      execvp(*grep_args, grep_args);
   }

   return (0);
}

0 个答案:

没有答案