Вопрос

В настоящее время я пишу несколько тестов CPPunit для программы, которая тестирует аппаратный порт связи (да, я пишу модульные тесты для приложения-тестера ;-)).Один из классов, который я тестирую, по сути, представляет собой оболочку файлового дескриптора устройства;я делаю read() и write() вызывает файловый дескриптор. Есть ли файл/драйвер устройства в Linux, где, если вы write() к этому, когда ты read() из него вы прочитаете то, что написали (как устройство очереди FIFO)? Если бы у меня был этот файл устройства, было бы очень просто поместить его вместо фактического файла устройства в мою оболочку, и это позволило бы легко эмулировать сценарии «петлевой проверки», которые могут возникнуть на реальном оборудовании.


По сути, то, что я ищу, было бы своего рода гипотетическим "/dev/echo" устройство.

Бывший:Устройство будет вести себя следующим образом:

open("/dev/echo", O_RDRW);

write(fdEcho, 123, sizeof(int));
write(fdEcho, 456, sizeof(int));
write(fdEcho, 789, sizeof(int));

read(fdEcho, iData,  sizeof(int);  // returns 123
read(fdEcho, iData2, sizeof(int);  // returns 456
read(fdEcho, iData3, sizeof(int);  // returns 789
Это было полезно?

Решение

Почему бы вам не использовать канал UNIX в файловой системе?

mkfifo /dev/test
echo test > /dev/test

на втором терминале:

cat /dev/test

Тогда первый разблокируется, а второй покажет текст!

Другие советы

Вы можете сделать один с

mknod /dev/echo p

Первым аргументом является имя файла (это может быть любое имя файла, не обязательно в /dev), второй аргумент p для «трубы».

Ссылка: http://www.unix.com/unix-dummies-questions-answers/22205-unix-pipe.html

Вы также можете просмотреть pipe() Функция С: http://www.manpagez.com/man/2/pipe/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top