2017-02-02 4 views
-2

Я работаю над программным проектом и должен передавать несколько значений из одного процесса в другой. Я пробовал лучше половину дня, и он все еще не работает. Может ли кто-нибудь написать мне краткий пример того, как это сделать?Как передать содержимое структуры по именованному каналу (fifo)?

+2

Просто «напишите» структуру на одном конце и «прочитайте» ее на другом? Что вы пробовали? Какие проблемы у вас есть с вашей попыткой? Пожалуйста, [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask) и узнайте, как создать [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/помощь/mcve). –

ответ

1

Автор:

struct X foo = /* ... */; 

fwrite(&foo, sizeof foo, 1, outfile); 

Читатель:

struct X foo; 

fread(&foo, sizeof foo, 1, infile); 

В FILE указатели infile и outfile получаются путем открытия соответствующей трубы, возможно, с использованием fdopen на дескрипторе Posix файла.

Убедитесь, что вызовы чтения и записи оба возвращают 1, в противном случае произошла ошибка.

+1

Было бы лучше сделать аргумент 'size'' 1' и аргумент count 'sizeof foo' для правильной обработки частичной записи. Аргумент 'count'' 1' делает это невозможным. Возможно, 'fwrite (& foo, 1, sizeof (foo), outfile);' –

+1

@AndrewHenle Это зависит от того, буферизирован ли 'FILE *' или нет. И для Kerrek, поэтому я действительно не рекомендую использовать функции stdio для чтения/записи канала для нетекстовых данных. Использование 'write' сделает его атомарным (если записанные данные меньше внутреннего буфера труб). –

+0

@Someprogrammerdude: Как именно 'write (2)' atom? Он является атомарным с учетом числа байтов, которые он написал, но это может быть всего лишь одно. –

 Смежные вопросы

  • Нет связанных вопросов^_^