【发布时间】:2013-05-19 16:42:29
【问题描述】:
我需要在一个程序中创建多个FIFO队列,用于同一进程中线程之间的通信。
我想我可以使用 pipe() 来达到这个目的,因为通过这种方式,我可以在从队列中获取节点的线程上使用 select 或 poll。
int* fd_pipe = (int*)malloc(2*sizeof(int));
pipe(fd_pipe);
现在的问题是如何将指针放入队列 由于每个节点都是一个结构,我想将指针放入队列中,类似于
类型定义{ 结构包 *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就是我想要的。
我的程序有什么问题吗? 特别是严格的别名或双关语问题? 谢谢!
【问题讨论】:
-
你不需要在 C 程序中强制转换
malloc的返回值。 -
我更新了我的代码,你的意思是强制转换 `Node* node = (Node*)malloc(sizeof(Node));` 不需要?我的源代码还有其他问题吗?
-
char buf[1000];绝对是错误的。这不是混叠违规,而是对齐违规。相反,您应该使用Node buf; -
但是我投了(节点*),不是吗?
标签: c pointers casting pipe strict-aliasing