在此程序中,num_pipe
实际上不是管道的数量,而是命令的数量(的确是个很糟糕的名字!)。
在两个命令之间需要一个管道,在三个命令之间需要两个管道...在N个命令之间需要N-1管道。
每个管道都依赖于两个文件描述符(一个用于读取,一个用于写入),因此命令2*(num_pipe-1)
需要文件描述符num_pipe
。
注意:malloc()
不会分配整数指针数组
(如问题中所述),而是分配整数数组。
遵循此逻辑,我将编写
for(i = 0; i < 2*(num_pipe-1); i += 2)
但2*(num_pipe-1)
等于,2*num_pipe-2
并且由于步骤是2
,所以循环条件与limit相同
2*num_pipe-3
。
我认为这简直令人困惑。