这是作业。我是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编程非常了不起,所以我不是要求解决方案,而是要求确切地说明需要做什么以及各种命令的含义。
由于
答案 0 :(得分:0)
要做的事情:
主要流程
man pipe()
)man fork
)man wait
)Chid 1
man dup
)man exec
)儿童2
关于execlp
,您可以在手册页中找到相关信息。 (man exec
)。最有趣的pnrt回答你的问题:
可能是最重要的事情 RTFM 。
这些函数的初始参数是要执行的文件的名称。 execl(),execlp()和execle()函数中的const char * arg和后续省略号可以被认为是arg0,arg1,...,argn。它们一起描述了一个或多个指向以null结尾的字符串的指针的列表,这些字符串表示执行程序可用的参数列表。按照惯例,第一个参数应指向与正在执行的文件关联的文件名。参数列表必须以NULL指针终止,并且由于这些是可变参数函数,因此必须将此指针强制转换为(char *)NULL。
特别是不要忘记最后一句话并结束通话execlp("ps", "ps", "-aux", NULL);
的参数或NULL
的任何参数。