【问题标题】:Read also null from SERIAL with POSIX使用 POSIX 从 SERIAL 中读取 null
【发布时间】:2013-08-08 11:01:25
【问题描述】:

我有使用所有字符符号进行通信的设备。我知道传输消息的固定长度,并且我正在使用 termio.h 与此设备进行通信。 问题是当符号数组之一为空符号 (\0) 时,我无法读取整个消息。读取功能此时停止,我的消息不完整。这很奇怪,因为我可以(使用函数 write())编写任意数量的空符号。 我知道每个字符串都假设为空结尾,但我需要阅读这些空符号,有没有办法做到这一点? 谢谢!

【问题讨论】:

  • 如果你有一个固定的尺寸,那么read那个尺寸。 read 函数不检查它读取的数据。可能是您的 输出 数据停止在零处。但是,除非您显示一些代码,否则无法确定。
  • @JoachimPileborg 几乎可以肯定是正确的。这是一个“C 风格的字符串”错误,几乎被钉在了上面。

标签: c++ c serial-port posix


【解决方案1】:

在下面的非规范模式下打开你的串口

options.c_lflag &= ~ICANON;

如果你没有这个标志,默认情况下串口以规范模式打开。

在非规范模式下,您将收到“原始”字节,我想这是您需要的

正在接收各种字符。

【讨论】:

  • 我的标志:se.c_iflag = 0; se.c_oflag= 0; se.c_cflag= CS8|V_B115200|PARENB|PARODD|CREAD|CLOCAL ; se.c_lflag &= ~ICANON; se.c_line= 0; se.c_cc[VMIN] = 0; se.c_cc[VTIME] = 0;se.c_iflag = 0; se.c_oflag= 0; se.c_cflag= CS8|V_B115200|PARENB|PARODD|CREAD|CLOCAL ; se.c_lflag &= ~ICANON; se.c_line= 0; se.c_cc[VMIN] = 0; se.c_cc[VTIME] = 0; se.c_iflag = 0; se.c_oflag= 0; se.c_cflag= CS8|V_B115200|PARENB|PARODD|CREAD|CLOCAL ; se.c_lflag &= ~ICANON; se.c_line= 0; se.c_cc[VMIN] = 0; se.c_cc[VTIME] = 0;
  • 对不起,我错了三次重复标志。有了这些标志,我仍然无法阅读整个消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多