【发布时间】:2010-07-12 12:55:03
【问题描述】:
所以我有这个测试代码通过 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”?
【问题讨论】:
-
你检查
tcsetattr返回值了吗? -
您说“HELLO”确实似乎会在调用 write() 函数时发送。你是如何确定这一点的?您确定它没有立即发送并且设备没有处理它吗?
-
我正在读取另一端的串口,在上述程序关闭之前我看不到“HELLO”。
-
您找到解决方案了吗?
-
时间太久了我不记得了。对不起!
标签: c linux serial-port tty