Запись в канал до размера PIPE_BUF
является атомарной (включена в limits.h
), поэтому вы можете легко упаковать вашу информацию в некоторый тип структуры и записать ее в канал в вашем дочернем процессе для родительский процесс для чтения. Например, вы можете настроить свою структуру так:
struct message
{
int word_freq;
char word[256];
};
Затем просто выполните чтение из вашего канала с буфером, равным sizeof(struct message)
. При этом имейте в виду, что лучше всего иметь только одного читателя / записывающего в канал, или у вас может быть несколько писателей (потому что записи являются атомарными), но опять же, только один читатель. Хотя с несколькими каналами можно управлять с помощью конвейеров, тот факт, что чтения являются , а не атомарными, означает, что вы можете получить сценарии, в которых сообщения либо пропускаются из-за недетерминированной природы планирования процессов, либо вы искажены сообщения, потому что процесс не завершает чтение и оставляет часть сообщения в канале.