C 使用单个进程从2个管道获得输出

C 使用单个进程从2个管道获得输出,c,sockets,pipe,C,Sockets,Pipe,我需要像“who | sort | array”这样实现。排序的输出应保存在数组中。我能够成功地做到这一点,使用2个管道和分叉两次。我们是否有可能在不付出两次努力的情况下实现同样的目标?相反,使用2个管道和单个流程 当前逻辑: child: 1) fork close(pipe(0)) dup2(pipe(1),1) execlp ; 2) fork dup2(pipe(0),0) dup2(pipe(3),1) exec

我需要像“who | sort | array”这样实现。排序的输出应保存在数组中。我能够成功地做到这一点,使用2个管道和分叉两次。我们是否有可能在不付出两次努力的情况下实现同样的目标?相反,使用2个管道和单个流程

当前逻辑:

child:

1) fork
      close(pipe(0))
      dup2(pipe(1),1)
      execlp ;
2) fork
      dup2(pipe(0),0)
      dup2(pipe(3),1)
      execlp ;
parent:
      dup2(pipe(2),0)
      and logic to save the same in an array

我可能不太明白你所说的“单一过程”是什么意思。你的意思是你仍然想调用
fork()
?要执行两个不同的程序,仍然需要分叉两次,但可以先等待一个程序完成,然后再分叉另一个程序。这就是你想做的吗?是的,我想用fork一次..如果你想执行两个程序,你还得用fork两次。你可以先等一个吃完再叉另一个。这就是你想做的吗?你应该更好地解释一下你对“谁排序数组”意味着什么。无论如何,我需要用两个叉子。。我还有一个问题。我定义了双指针并动态地为其分配内存。现在,当我按下ctrl+c时,它会给我类似于^c***glibc detected***./rsrtd:free():无效指针:0x007c63d0***======================/lib/libc.so.6[0x6a8041]。/rsrtd[0x8048f77]。/rsrtd[0x8048ff5][0xd4b400]/libc.so.6([0x64fcc6]。/RTD[0x8048851]======内存映射:00324000-00341000 r-xp 00000000 fd:00 1194704/lib/libgcc_-4.4.5-20110214.so.1。。我甚至调用inthandler来释放内存,但它不起作用