Запись и чтение целых чисел из канала в C - PullRequest
0 голосов
/ 07 февраля 2012

Я пытаюсь понять, используя каналы в C, в частности, писать и читать целые числа.У меня есть родительский процесс, который создает 3 дочерних процесса.Два дочерних процесса вычисляют числа и записывают их в канал.Третий процесс читает из обеих каналов и затем отображает.Звучит просто, верно?

Я нашел этот пост: Как отправить целое число с конвейером между двумя процессами! о том, как отправлять целые числа через каналы и следовать за ним, но я не получаю правильный вывод,

Редактировать: для дальнейшего пояснения я запускаю каналы следующим образом:

int p1[2]; //pipe1 
int p2[2]; //pipe2
pipe(p1); //intialize pipe1 for between process 1 & 3
pipe(p2); //initialize pipe2 for between process 2 & 3

После некоторой отладки я замечаю, что в канал записывается неправильный номер.Вот как я записываю int в канал:

int c0 = 18;
write(p2[1], &c0, sizeof(c0));

, и вот как я читаю:

int disp[4];
read(p1[0], &disp[0], sizeof(disp[0]));

и т. Д., Пока массив не заполнится.

Теперь вместо записи чего-то вроде 14 в канал он записывает большое число, например 17462. Я предполагаю, что он пишет адрес, верно?Если так, то как бы я записал фактическое целое число в трубу?Должен ли я удалить '&' из утверждений, потому что это приводит к ошибкам приведения.Любые советы, советы, комментарии всегда приветствуются.Благодаря.

1 Ответ

0 голосов
/ 07 февраля 2012

Вам, вероятно, нужно установить блокировки записи в канале.

Если процесс 1 и процесс 2 записывают в канал одновременно, вы можете смешать байты в конвейере так, чтобы в результате чтения было какое-то странное число, которое вы никогда не видели.

...