dispositivo “eco” para Testes Unitários
-
21-08-2019 - |
Pergunta
Atualmente estou escrevendo alguns testes CppUnit para um programa que testa uma porta de comunicação hardware (sim, eu estou escrevendo testes de unidade para um aplicativo testador ;-)). Uma das classes que estou testando é basicamente um invólucro em torno descritor de arquivo do dispositivo; I fazer chamadas read()
e write()
sobre o descritor de arquivo. Existe um arquivo de dispositivo / driver no Linux, onde se write()
a ele, quando você read()
com isso você vai ler de volta o que você escreveu (como um dispositivo de fila FIFO)? Se eu tivesse esse arquivo de dispositivo, que seria muito simples se estatelar que no lugar do arquivo de dispositivo real na minha capa e tornaria mais fácil para emular cenários "auto-retorno" que possam ocorrer no hardware do mundo real.
Essencialmente, o que eu estou procurando seria uma espécie de dispositivo "/dev/echo"
hipotética.
Ex: O dispositivo se comportaria como se segue:
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
Solução
Por que você não usar um tubo de UNIX no sistema de arquivos?
mkfifo /dev/test
echo test > /dev/test
em um segundo terminal:
cat /dev/test
Em seguida, o primeiro vai desbloquear eo segundo irá mostrar o texto!
Outras dicas
Você pode fazer um com
mknod /dev/echo p
O primeiro argumento é o nome do arquivo (que pode ser qualquer nome de arquivo, não tem que estar em /dev
), segundo argumento é p
para "pipe".
Referência: http: //www.unix .com / Unix manequins de-perguntas-respostas / 22205-unix-pipe.html
Você também pode olhar para a função C pipe()
: http: //www.manpagez. com / homem / 2 / tubo /