我需要在程序中創建多個FIFO隊列,用於同一進程中線程之間的通信。指向pipe的指針,是否存在嚴格的別名或雙關語類型問題?
我想我可以用管道()用於此目的,因爲這樣,我可以使用select或poll從隊列中獲取節點的線程上。
int* fd_pipe = (int*)malloc(2*sizeof(int));
pipe(fd_pipe);
現在的問題是如何把指針到隊列 因爲每個節點是strucutre,我希望把指針到隊列中,像
的typedef { 結構包* PKT; struct Info * info; int seq; }節點;
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));'是不是必須的?我的源代碼中是否還有其他問題? – misteryes
'char buf [1000];'是絕對錯誤的。這不是鋸齒違規,而是違反對齊。相反,你應該使用'節點buf;' –