«Эхо» устройство для юнит-тестирования - PullRequest
4 голосов
/ 15 мая 2009

В настоящее время я пишу некоторые тесты 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

Ответы [ 2 ]

5 голосов
/ 15 мая 2009

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

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

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

cat /dev/test

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

4 голосов
/ 15 мая 2009

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

mknod /dev/echo p

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

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

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

...