串行端口 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);

解决方法:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值