带有ttyS的write()是非阻塞的

时间:2013-03-27 07:03:00

标签: c linux tty

我的问题是 - 如何在uCLinux 2.6.21同步中调用write(),即调用在发送结束前没有完成? 现在我有以下代码:

//...
fd = open (PORT, O_RDWR | O_SYNC)
//...

FIO3CLR |= 0x30000000; // RTS = 0 (enable transfer)
write (fd, "A", 1) // pass
FIO3SET |= 0x30000000; // RTS = 1 (disable transfer)

命令FIO3SET |= 0x30000000;几乎在调用write()后立即执行,因为这是不受欢迎的任务。 感谢。

2 个答案:

答案 0 :(得分:0)

我的猜测是你应该设置TTY属性,如果设置属性,Linux内核将执行RTS / CTS处理。有关完整示例,请参阅http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html。我猜想回答你问题的部分就是:

newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; // CRTSCTS is set here
//...
tcsetattr(fd,TCSANOW,&newtio);

答案 1 :(得分:0)

tcdrain()等待直到发送到fd引用的对象的所有输出。 它解决了我的问题 C read call blocking on serial port operation