所以我有这个测试代码通过 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”,但有一个问题。调用 write() 函数时似乎不会发送“HELLO”,而是在关闭文件描述符时发送。我在上面添加了 sleep(5) 行来测试这个理论,果然,“HELLO”在程序执行后约 5 秒发送。如何在 write() 命令之后而不是在 close() 之后立即发送“HELLO”?