Я работаю над программным проектом и должен передавать несколько значений из одного процесса в другой. Я пробовал лучше половину дня, и он все еще не работает. Может ли кто-нибудь написать мне краткий пример того, как это сделать?Как передать содержимое структуры по именованному каналу (fifo)?
ответ
Автор:
struct X foo = /* ... */;
fwrite(&foo, sizeof foo, 1, outfile);
Читатель:
struct X foo;
fread(&foo, sizeof foo, 1, infile);
В FILE
указатели infile
и outfile
получаются путем открытия соответствующей трубы, возможно, с использованием fdopen
на дескрипторе Posix файла.
Убедитесь, что вызовы чтения и записи оба возвращают 1
, в противном случае произошла ошибка.
Было бы лучше сделать аргумент 'size'' 1' и аргумент count 'sizeof foo' для правильной обработки частичной записи. Аргумент 'count'' 1' делает это невозможным. Возможно, 'fwrite (& foo, 1, sizeof (foo), outfile);' –
@AndrewHenle Это зависит от того, буферизирован ли 'FILE *' или нет. И для Kerrek, поэтому я действительно не рекомендую использовать функции stdio для чтения/записи канала для нетекстовых данных. Использование 'write' сделает его атомарным (если записанные данные меньше внутреннего буфера труб). –
@Someprogrammerdude: Как именно 'write (2)' atom? Он является атомарным с учетом числа байтов, которые он написал, но это может быть всего лишь одно. –
Просто «напишите» структуру на одном конце и «прочитайте» ее на другом? Что вы пробовали? Какие проблемы у вас есть с вашей попыткой? Пожалуйста, [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask) и узнайте, как создать [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/помощь/mcve). –