我需要在一个程序中创建很多FIFO队列,用于同一进程中线程之间的通信。
我想我可以使用 pipe() 来达到这个目的,因为通过这种方式,我可以在从队列中获取节点的线程上使用 select 或 poll。
int* fd_pipe = (int*)malloc(2*sizeof(int));
pipe(fd_pipe);
现在的问题是如何将指针放入队列,因为每个节点都是一个结构,我想将指针放入队列中,例如
typedef{ 结构数据包 *pkt; 结构信息*信息;整数序列;}节点;
on threads which put node into the queue:
Node* node = (Node*)malloc(sizeof(Node));
Node->info = ...;
Node->seq = ...;
Node->pkt = ...;
write(fd_pipe[1], node, sizeof(node));
on threads which read node from the queue:
char buf[1000];
read(fd_pipe[0], buf, sizeof(node))
Node* mynode = (Node*)buf;
那么 mynode 就是我想要的。
我的程序有什么问题吗?特别是严格的别名或双关语问题?谢谢!