したがって、USBシリアルポートを介して「HELLO」を送信する次のテストコードがあります。
int fd;
struct termios tty;
if((fd = open("/dev/ttyUSB0", O_WRONLY|O_NONBLOCK|O_NOCTTY)) == -1){
err(1, "Cannot open write on /dev/ttyUSB0");
}
tcgetattr(fd, &tty);
tty.c_iflag = 0;
tty.c_oflag = 0;
tty.c_lflag = 0;
tty.c_cflag = 0;
tty.c_cc[VMIN] = 0;
tty.c_cc[VTIME] = 0;
cfsetospeed(&tty, B19200);
cfsetispeed(&tty, B19200);
tty.c_cflag |= CREAD|CRTSCTS|HUPCL|CS8;
tcsetattr(fd, TCSANOW, &tty);
printf("Write: %i\n", write(fd, "HELLO", 5));
sleep(5);
if(close(fd) != 0){
warn("Could not close write fd");
}
プログラムは正常に実行され、"HELLO" が送信されますが、問題が 1 つあります。「HELLO」は、write() 関数が呼び出されたときに送信されるのではなく、ファイル記述子が閉じられたときに送信されるようです。この理論をテストするために上に sleep(5) 行を追加しましたが、確かに、プログラムが実行されてから 5 秒後に「HELLO」が送信されます。close() コマンドの代わりに write() コマンドの直後に「HELLO」を送信するにはどうすればよいですか?