Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不理解C中管道创建中的循环_C_Loops_For Loop - Fatal编程技术网

不理解C中管道创建中的循环

不理解C中管道创建中的循环,c,loops,for-loop,C,Loops,For Loop,关于我目前正在研究的这段代码,我有一个概括性的问题:这个函数在C Shell实现中用于执行管道命令。我不明白写这篇文章的人是如何知道要关闭多少管道的(为什么限制是2*com-2) (i=0;i

关于我目前正在研究的这段代码,我有一个概括性的问题:这个函数在C Shell实现中用于执行管道命令。我不明白写这篇文章的人是如何知道要关闭多少管道的(为什么限制是
2*com-2

(i=0;i<2*com-2;i++)关闭(pip[i]); 对于(i=0;i在这个程序中,
num\u pipe
实际上不是管道的数量 但是命令的数量(确实是一个非常糟糕的名字!)。
在两个命令之间需要一个管道,在三个命令之间需要一个管道 您需要两个管道…在N个命令之间需要N-1个管道。
每个管道依赖于两个文件描述符(一个用于读取,一个用于存储) 因此,需要
2*(num\u pipe-1)
文件描述符 用于
num_pipe
命令。
注意:
malloc()
不分配整数指针数组 (如问题中所述)但是一个整数数组

按照这个逻辑,我会写
for(i=0;i<2*(num_pipe-1);i+=2)
但是
2*(num_pipe-1)
等于
2*num_pipe-2
,并且从步骤开始 为
2
,循环条件与极限相同
2*num\u管道-3


在我看来,这太令人困惑了。

在这个程序中,
num\u pipe
实际上不是管道的数量 但是命令的数量(确实是一个非常糟糕的名字!)。
在两个命令之间需要一个管道,在三个命令之间需要一个管道 您需要两个管道…在N个命令之间需要N-1个管道。
每个管道依赖于两个文件描述符(一个用于读取,一个用于存储) 因此,需要
2*(num\u pipe-1)
文件描述符 用于
num_pipe
命令。
注意:
malloc()
不分配整数指针数组 (如问题中所述)但是一个整数数组

按照这个逻辑,我会写
for(i=0;i<2*(num_pipe-1);i+=2)
但是
2*(num_pipe-1)
等于
2*num_pipe-2
,并且从步骤开始 为
2
,循环条件与极限相同
2*num\u管道-3


在我看来,这是非常混乱的。

对的数量比命令少一个,因为这就是所有需要的。考虑两个命令。在它们之间设置多少个管道集合?一个。三个命令?ANS:两个。(第一个命令和第二个命令之间的一个集合,第二个和第第三个之间的另一个集合。”安娜:为什么这个问题是由shell标记的?对的数量比命令少一个,因为这就是所有需要的。考虑两个命令。在它们之间设置多少个管道集合?ANN:一个。三个命令?ANS:两个。(一组在第一个命令和第二个命令之间,另一组在第二个命令和第三个命令之间。@Anna:为什么这个问题用shell标记?
        for(i = 0; i < 2*com - 2; i++) close(pip[i]);
        for(i = 0; i < com; ++i) {
                waitpid(pid, &status, WUNTRACED);