我正试图用线程来解决这个问题,我也需要使用管道。我需要创建N个管道和N个线程,但为了创建N个是(int fd[N][2];(并且可以通过线程函数访问的管道,这些管道需要是全局的。
我曾经研究过使用动态内存,但我不知道如何使用。有解决方案吗?
如何创建具有用户定义长度的全局数组?
从技术上讲,你做不到"Global";不是C语言术语,但您的意思是具有外部链接的对象,并且具有外部(或内部(链接的数组的维度必须是整数常量表达式。
可以做的事情之一是声明一个具有外部链接的指针对象,并根据用户的规范为其动态分配指向的空间。您可以使用与数组相同的语法通过指针访问分配的对象。示例:
数据.h
// ...
extern int (*fd)[2];
extern int num_pipes;
// ...
main.c
// ...
// no "extern" in this one place:
int (*fd)[2];
int num_pipes;
int main(void) {
// ... set num_pipes ...
fd = malloc(num_pipes * sizeof(*fd));
if (fd == NULL) {
// TODO: handle allocation failure
}
// ...
}
其他.c
#include "data.h"
int make_pipes() {
for (int i = 0; i < num_pipes; i++) {
int result = pipe(fd[i]);
// ... error handling ...
}
}