Как дочерний процесс может вернуть два значения родителю при использовании pipe ()? - PullRequest
2 голосов
/ 28 сентября 2011

Мой дочерний процесс считает частоту слов из текстового файла.Я использую pipe() для IPC.Как дочерний процесс может вернуть и имя слова, и частоту слова родительскому процессу?Мой исходный код на C, и я выполняю его в среде UNIX.

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

Запишите два значения в один конец канала в дочернем элементе, разделенных каким-либо разделителем.В родительском объекте прочитайте с другого конца канала и отделите содержимое с помощью разделителя.

2 голосов
/ 28 сентября 2011

Запись в канал до размера PIPE_BUF является атомарной (включена в limits.h), поэтому вы можете легко упаковать вашу информацию в некоторый тип структуры и записать ее в канал в вашем дочернем процессе для родительский процесс для чтения. Например, вы можете настроить свою структуру так:

struct message
{
    int word_freq;
    char word[256];
};

Затем просто выполните чтение из вашего канала с буфером, равным sizeof(struct message). При этом имейте в виду, что лучше всего иметь только одного читателя / записывающего в канал, или у вас может быть несколько писателей (потому что записи являются атомарными), но опять же, только один читатель. Хотя с несколькими каналами можно управлять с помощью конвейеров, тот факт, что чтения являются , а не атомарными, означает, что вы можете получить сценарии, в которых сообщения либо пропускаются из-за недетерминированной природы планирования процессов, либо вы искажены сообщения, потому что процесс не завершает чтение и оставляет часть сообщения в канале.

...