Мне нужно создать много очередей FIFO в программе, которая используется для связи между потоками в одном процессе.пишите указатели на трубку, есть ли какие-либо строгие проблемы с псевдонимом или какими-то типами?
Я думаю, что для этой цели я могу использовать pipe(), потому что таким образом я могу использовать select или poll в потоке, который извлекает узлы из очереди.
int* fd_pipe = (int*)malloc(2*sizeof(int));
pipe(fd_pipe);
теперь проблема заключается в том, чтобы поместить указатель в очередь , поскольку каждый узел является strucutre, я хочу, чтобы поместить указатель в очередь, что-то вроде
ЬурейеГо { STRUCT Packet * ПКТА; 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 - это то, что я хочу.
Есть ли что-то не так в моей программе? особенно строгие проблемы с псевдонимом или каламбурой? спасибо!
Вам не нужно указывать возвращаемое значение 'malloc' в программе на языке C. –
Я обновил свой код, вы имеете в виду листинг 'Node * node = (Node *) malloc (sizeof (Node));' не нужно? есть ли другие проблемы в моем исходном коде? – misteryes
'char buf [1000];' определенно неправильно. Это не нарушение наложения, а нарушение выравнивания. Вместо этого вы должны использовать 'Node buf;' –