系统相关
首页 > 系统相关> > Linux,串行端口,非缓冲模式

Linux,串行端口,非缓冲模式

作者:互联网

我正在尝试在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);

来自:http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html

解决方法:

看起来我找到了解决方案.

/* 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