温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Undestanding for loop in pipe creation in C
c for-loop loops

其他 - 不了解C中管道创建的循环

发布于 2020-03-28 23:31:09

我现在正在研究有关此代码的强制问题:此函数在C Shell实现中用于执行管道命令。我不明白写它的人是怎么知道要关闭多少个管道的(为什么是极限2*com- 2)?

        for(i = 0; i < 2*com - 2; i++) close(pip[i]);
        for(i = 0; i < com; ++i) {
                waitpid(pid, &status, WUNTRACED);

查看更多

查看更多

提问者
Anna
被浏览
178
prog-fh 2020-01-31 18:10

在此程序中,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
我认为这简直令人困惑。