Linux串口编程——清空输入输出缓存

 

 

背景

在我们的工作中,串口是一种比较常用的数据传输方式。在某些应用场景下,当程序启动并打开串口后,我们不希望读出串口打开之前的输入缓存数据(即内核驱动已接收但是并未被应用层读出的数据),因此需要对输入缓存数据进行清空(刷清、丢弃)操作。下面以Linux系统上串口编程为例进行说明:


测试环境

硬件环境:PC
操作系统:Ubuntu 14.04虚拟机


测试代码

  • 方法一
fd = open("devpath", O_RDWR|O_NOCTTY);
usleep(200000);
tcflush(fd, TCIFLUSH);    //清空输入缓存
tcflush(fd, TCOFLUSH);    //清空输出缓存
tcflush(fd, TCIOFLUSH);   //清空输入输出缓存
tcsetattr(m_ifd, TCSANOW, &strctNewTermios);
  • 方法二
fd = open("devpath", O_RDWR|O_NOCTTY);
usleep(200000);
ioctl(fd, TCFLSH, 0);    //清空输入缓存
ioctl(fd, TCFLSH, 1);    //清空输出缓存
ioctl(fd, TCFLSH, 2);    //清空输入输出缓存
tcsetattr(fd, TCSANOW, &strctNewTermios);

总结

  1. 必须在open和tcflush(或ioctl)操作间进行延时操作(具体时间未做验证),否则没有清空效果,原因未知,可能跟Linux内核版本有关
  2. 可自由选择只清空输入或只清空输出或两者都清空
  3. tcflush和ioctl两种方法均有效,注意ioctl的第二个参数是TCFLSH
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值