Добрый вечер, стоит задача передать набор данных из клиента на сервер, "клиент" и "сервер" - названия формальные, так как обе программы работают на одной машине. Для этого клиентом создается неименованный канал, пишутся в него данные, далее клиент отправляет серверу сообщение с идентификаторами созданного канала. Данные в канал пишутся, идентификаторы передаются, однако сервер читать не желает.
| Код | //CLIENT
//структура-сообщение, очередь создается выше и работает корректно
struct { long mestype; int pipe_read; int pipe_write; } msg_pipe;
//в канал все записывается
for (i=1;i<=width*height;i++) { scanf("%d",&num); write(big_pipe[1],&num,sizeof(int)); } //настройка и передача сообщения, MSGPIPE моя константа
msg_pipe.mestype = MSGPIPE; msg_pipe.pipe_read = big_pipe[0]; msg_pipe.pipe_write = big_pipe[1]; msgsnd(msid,&msg_pipe,2*sizeof(int),0);
|
| Код | //SERVER //очередь сообщений создана, структура msg_pipe аналогична клиентской //читаем сообщение из очереди msgrcv(msid,&msg_pipe,2*sizeof(int),MSGPIPE,0);
big_pipe[0] = msg_pipe.pipe_read; big_pipe[1] = msg_pipe.pipe_write; //идентификаторы передались корректно //но данный оператор читать из пайпа не желает read(big_pipe[0],&num,sizeof(int));
|
Похоже проблема в том, что пайпы можно использовать только для взаимодействия между родительскими и дочерними процессами. Если я прав, то можно ли как-то заставить это работать? Заранее спасибо. |