Unix:如何清除串口I/O缓冲区?

2024-02-13

我正在为标准 PC 串行端口开发“高级”C++ 接口。当我打开端口时,我想清除输入和输出缓冲区,以便不接收或发送以前使用该端口的数据。为此,我使用 tcflush 函数。然而,它不起作用。怎么可能?我的“端口开放”代码如下所示。是的,我使用 C++ 异常,但没有抛出任何异常。这表明 tcflush 返回 0 但它不会清除缓冲区。

我清除输入缓冲区的唯一方法是从中读取字节,直到没有剩余字节为止。这通常需要几秒钟,我不认为这是一个解决方案。

提前致谢 :-)

fd = ::open(port.c_str(), O_RDWR | O_NOCTTY);

if (fd < 0)
{
    throw OpenPortException(port);
    return;
}

// Get options
tcgetattr(fd, &options);

// Set default baud rate 9600, 1 stop bit, 8 bit data length, no parity
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;

// Default timeout (1000 ms)
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;

// Additional options
options.c_cflag |= (CLOCAL | CREAD);

this->port = port;

// Apply the settings now
if (tcsetattr(fd, TCSANOW, &options) != 0)
{
    throw PortSettingsException();
}

// Flush the port
if (tcflush(fd, TCIOFLUSH) != 0)
{
    throw IOException();
}

这是正确的方法(如下):

usleep(1000);
ioctl(fd, TCFLSH, 0); // flush receive
ioctl(fd, TCFLSH, 1); // flush transmit
ioctl(fd, TCFLSH, 2); // flush both

用户可以根据需要选择前两行或单独选择最后一行。请检查是否需要睡眠。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unix:如何清除串口I/O缓冲区? 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 在 R Studio 的 R 中以 Markdown 形式生成代码块括号的键盘快捷键

    是否有键盘快捷键可以在 Rmarkdown 中生成代码块括号 r on pc in RStudion it s Ctrl Alt i
  • 具有级联 DropDownList 的 Kendo UI 网格

    我的 Razor 布局上有一个 Kendo UI 网格 它从控制器获取数据 在此网格中 我希望有一组 3 个 DropDownList 它们是 ProductGroups Products Services 我希望实现的行为是 当我向网格添
  • 使用 Java 从大整数数组中删除重复项

    您是否知道使用 Java 从非常大的整数数组中删除重复值的省时方法 数组的大小取决于登录的用户 但始终会超过 1500000 个未排序的值 并有一些重复项 每个整数都包含 100000 到 9999999 之间的数字 我尝试将其转换为列表
  • 使用 Fluent nhibernate 映射实体 oneToMany

    问题似乎很简单 但是我在尝试映射这个实体时遇到了很多麻烦 我只是看不出我做错了什么 你们能帮我吗 我有课Cliente public class Cliente public Cliente public virtual int Clien
  • 在进程之间共享类实例的方法

    我编写了一个 C 类 我需要在至少两个 Windows 进程之间共享一个实例 有哪些不同的方法可以做到这一点 最初我调查了 pragma data seg http msdn microsoft com en us library h90d
  • R Shiny 应用程序中的安全性

    我想发布一个 R Shiny Web 应用程序 http www rstudio com shiny http www rstudio com shiny 在网络上 但我想用密码保护它 以便只有拥有凭据的人才能查看我发布的内容 做这个的最好
  • 如何在 JavaScript 中将通配符元素名称与“querySelector()”或“querySelectorAll()”匹配?

    有没有办法使用通配符元素名称匹配querySelector or querySelectorAll 我试图解析的 XML 文档基本上是一个简单的属性列表 我需要找到名称中包含某些字符串的元素 我看到属性查询中支持通配符 但不支持元素本身 除
  • Node.js 中固定位置命令提示符

    有没有办法让命令提示符 只是一个question http nodejs org api readline html readline rl question query callback提示符或类似的东西 固定在终端的底部 并使用它来记录
  • AWS Glue:爬网程序无法识别 CSV 格式的时间戳列

    运行 AWS Glue 爬网程序时 它无法识别时间戳列 我已在 CSV 文件中正确设置 ISO8601 时间戳的格式 首先 我希望 Glue 能够自动将它们分类为时间戳 但事实并非如此 我还尝试从此链接中使用自定义时间戳分类器https d
  • 有没有办法将 Ruby Net::HTTP 请求附加到特定的 IP 地址/网络接口?

    我正在寻找一种方法 通过标准 Net HTTP 库为每个 GET 请求使用不同的 IP 地址 服务器有 5 个 IP 地址 并假设当达到每个 IP 的请求限制时 某些 API 会阻止访问 因此 唯一的方法是使用另一台服务器 我在 ruby
  • Python 中的 N-curses:如何捕获并打印非 ASCII 字符?

    我想用 ncurses python 制作一个小程序 并且能够使用 输入法语和日语 我知道我应该设置区域设置并使用 unicode 标准 但是如何处理 screen getch 的结果呢 我想在 ncurses 窗口中显示键入的字符 而不管
  • 刷新 Azure AD B2C 中的令牌撤销

    在我的 AD B2C 应用程序中 我需要撤销 AD B2C 为用户提供的所有刷新令牌 当用户帐户登录多个应用程序并且在一个应用程序中用户更改了密码时 这是一项需要实施的要求 更改密码后 我已撤销给予其他应用程序的所有刷新令牌 怎么做 Upd
  • 找不到 weblogic maven 插件

    我按照这个教程安装 weblogic 插件 http docs oracle com cd E21764 01 web 1111 e13702 maven deployer htm http docs oracle com cd E2176
  • 缺少 Firebase app_update 事件

    我看到了巨大的差异app updateFirebase 自动发送的事件以及用户群在发布时真正转换为新版本的情况 例如新版本发布期间的 5 天 120 个事件 VS 3k 用户 x20 差异 我确实检查了另一个 alpha 更新 其中数据导出
  • Pandas GroupBy 日期范围取决于每行

    我想做以下事情 对于如下所示的数据框 df pd DataFrame ID A A C B B date 06 24 2014 06 25 2014 06 23 2014 07 02 1999 07 02 1999 value 3 5 1
  • 致命错误:在非对象上调用成员函数 fetch_assoc() [重复]

    这个问题在这里已经有答案了 我正在尝试执行一些查询来获取有关某些图像的信息页面 我写了一个函数 function get recent highs view deleted images false lower this gt databa
  • 如何使用flask_sqlalchemy反映现有表

    我注意到一个方法 db reflect bind all app app 但我想知道如何使用它 如果您能提供帮助 我将不胜感激 from flask import Flask from flask sqlalchemy import SQL
  • 从不同的函数访问变量

    我有以下 HTML 代码 它创建一个按钮 单击该按钮时会在我的页面中创建一些问题 工作正常
  • 除了使用 TM_FILENAME_BASE 之外,还有其他方法可以修剪 TM_FILENAME 吗?

    我正在尝试为 redux 容器文件创建一个片段 该文件导入一些具有相同基本名称的反应文件 TM FILENAME BASE 非常适合从文件名中删除 js 但在本例中 我的组件文件的扩展名是 fun thing component js 容器
  • Unix:如何清除串口I/O缓冲区?

    我正在为标准 PC 串行端口开发 高级 C 接口 当我打开端口时 我想清除输入和输出缓冲区 以便不接收或发送以前使用该端口的数据 为此 我使用 tcflush 函数 然而 它不起作用 怎么可能 我的 端口开放 代码如下所示 是的 我使用 C