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