Unix - 管道,分支,execlp,dup2,c程序

时间:2015-05-23 22:15:22

标签: c linux unix pipe fork

这是作业。我是unix编程的新手,可以使用一些帮助。我需要创建一个执行以下操作的C程序:

在main()函数中,它使用pipe()函数创建管道,然后使用fork()创建两个子进程。子1将stdout重定向到管道的写端,然后用execlp()执行" ps -aux"命令。子2将其输入从stdin重定向到管道的读取端,然后执行" sort -r -n -k 5"命令。 创建两个子进程后,父进程等待它们终止,然后才能退出。 请注意,您可能必须先创建Child 2,然后再创建Child 1。 父程序与运行命令" ps -aux |的shell完全相同sort -r -n -k 5"。您必须使用fork(),pipe(),dup2(),close(),execlp()函数(或其他exec()变体)。

我是CS大四学生并且对Windows编程非常了不起,所以我不是要求解决方案,而是要求确切地说明需要做什么以及各种命令的含义。

由于

1 个答案:

答案 0 :(得分:0)

要做的事情:

主要流程

  • 创建一个管道(参见:man pipe()
  • 启动2个子进程(请参阅:man fork
  • 等待他们退出(参见:man wait
  • 出口

Chid 1

  • 重定向stdout以写入管道末端(请参阅:man dup
  • 运行ps -aux(参见:man exec
  • 出口

儿童2

  • 将管道的读取结束重定向到stdin
  • 运行sort -r -n -k
  • 出口

关于execlp,您可以在手册页中找到相关信息。 (man exec)。最有趣的pnrt回答你的问题:

可能是最重要的事情 RTFM

  

这些函数的初始参数是要执行的文件的名称。   execl(),execlp()和execle()函数中的const char * arg和后续省略号可以被认为是arg0,arg1,...,argn。它们一起描述了一个或多个指向以null结尾的字符串的指针的列表,这些字符串表示执行程序可用的参数列表。按照惯例,第一个参数应指向与正在执行的文件关联的文件名。参数列表必须以NULL指针终止,并且由于这些是可变参数函数,因此必须将此指针强制转换为(char *)NULL。

特别是不要忘记最后一句话并结束通话execlp("ps", "ps", "-aux", NULL);的参数或NULL的任何参数。