用循环数组创建管道

时间:2018-10-06 13:35:06

标签: c pipe

我需要在C中创建10个管道。 为了使它们工作,我需要创建10个大小为2的int数组?或者我可以只声明一个大小为20的数组,然后为管道指定每个管道应从何处开始的地址? 如果我必须创建10,有什么办法可以循环创建它们并获得某种结果?

for(i=0; i<10; i++){
    vec0[2];    //create array vec0, vec1, vec2....
    pipe(vec0);
}

数组甚至是执行此操作的最佳方法吗?

2 个答案:

答案 0 :(得分:2)

您可以只使用如下所示的二维int数组。

int fds[10][2];
for(i=0; i<10; i++){
   pipe(fds[i]);
}

其中fds[i][0]代表读取结束,fds[i][1]代表写入结束。


如果您不想使用二维数组,则可以声明具有20个int的数组,如下所示,并使用基于偏移的方法来传递和读取fd's

 int fds[20];
 for(i=0; i<10; i++){
       pipe(fds+i*2);
    }

然后fds[i*2]代表读取结束,fds[i*2+1]代表写入结束。

答案 1 :(得分:2)

  

我需要在C中创建10个管道。为了使其正常工作,我需要创建10个大小为2的int数组?

那将是一种选择,但不是唯一的选择。

  

还是我可以声明一个大小为20的数组,然后为管道指定每个管道应从何处开始的地址?

是的,您可以这样做。 pipe()函数在任何情况下都只接收指向第一个int的指针,并要求可以通过该指针寻址随后的一个指针。

  

如果我必须创建10个,有什么办法可以循环创建它们并获得某种结果?

是的,您可以在循环中声明两个{int数组,将其传递给pipe(),然后在下一次迭代之前将结果复制到更永久的存储中,但这将很浪费

首先要考虑的是如何存储管道端文件描述符。如果仅在循环期间需要它们,则可以继续重复使用同一数组,或使用每个循环迭代数组,这样就永远只有一个。

但是假设您只想在循环中创建管道,这样您就需要在循环结束后跟踪其所有文件描述符。在这种情况下,仅保存文件描述符的最自然的数据结构将是数组数组,也就是2D数组:

int pipefds[10][2];

如果您打算使用这种结构,那么您的循环可能看起来像这样:

int pipefds[10][2];

for (int i = 0; i < 10; i++) {
    pipe(pipefds[i]);
}