我正在尝试在Linux中使用串行端口来组织nob阻止读写功能.这是我的代码:http://pastebin.com/RSPw7HAi
一切正常,但已缓冲.这意味着,如果我通过控制台CR符号输入到串行,则select检测到新的输入,否则,如果我通过简单的python脚本输入,它将缓冲所有符号并等待,直到我发送回车符为止.
因此,使用此输入(如下所示),它只是将符号缓冲在某处.
我必须通过USB2Serial转换器连接PC
#!/usr/bin/env python3
import serial
cmd1_state = b'\x3E\x01\x00\x01'
#Selecting serial port for commands to be sent --> /dev/ttyUSB0
serial_0 = serial.Serial('/dev/ttyUSB2');
print("Using serial port ", serial_0.portstr);
serial_0.write(cmd1_state)
# closing serial port
serial_0.close()
那么,有人可以告诉我在这里做什么吗?我是否必须在C文件的端口打开范围内更改某些内容,或者使用python脚本来完成?我稍后使用了flush()方法,但它也没有帮助.
顺便说一句,我已经将f_NOCACHE arg搜索到fcntl()函数.但!据我所知,这完全是关于BSD和Darwin OS的,在Linux中没有这样的东西(F_NOACHE arg到fcntl).
UPD:
看起来我找到了解决方案.
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 char received */
tcflush(fd, TCIFLUSH);
解决方法:
看起来我找到了解决方案.
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 char received */
tcflush(fd, TCIFLUSH);
Taken from : http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html
标签:nonblocking,serial-port,unbuffered,linux
来源: https://codeday.me/bug/20191201/2077300.html