Устройство «Эхо» для модульного тестирования
-
21-08-2019 - |
Вопрос
В настоящее время я пишу несколько тестов 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/