c - 当我拔下串行电缆时,Linux read() 调用不返回错误

标签 c linux serial-port

<分区>

我是 C 和 Linux 的新手。我正在尝试使用 read() 系统调用从 串行端口 读取一些数据,它工作正常。问题是即使我在代码运行时拔下串行电缆,read()不返回负值。请帮助

如果场景不清楚,请随时询问。感谢您的宝贵时间

编辑: 当我拔下电缆时,它会返回一个零。

char cBuff[100];
buffptr = cBuff;
while (( nbytes = read(fd, buffptr, cBuff + sizeof(cBuff) - buffptr - 1)) > 0)
{
  //Do something
}

if(nbytes < 0 )
{
  perror("Serial Read Thread ERROR:");
}
else if(nbytes >= 0 )
{
  //Do something
}

最佳答案

拔下串口线只会造成数据无法再到达,但并没有真正的“连接”会因某种原因而中断。

您的串口现在只注意到没有更多的“0”值到达,因为线路现在一直保持在“1”。

因此,驱动程序只看到没有任何数据,但并没有看到插头拔掉就没有数据。

关于c - 当我拔下串行电缆时,Linux read() 调用不返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40214863/

相关文章:

c - C 结构的数据对齐

c - C 中的 Pthreads。简单的示例不起作用

linux - 我如何在 ubuntu linux 中流水线化两个通过串行端口共享数据的程序?

C 编程 - 递归的两个 for 循环

c++ - 将帧速率提高到 30 fps 并从 AVT GigE 相机获取 bayerrg8

linux - 如何删除除最后 2 个目录以及指向这些目录的符号链接(symbolic link)之外的所有目录

c++ - 无法在Linux上使用流打印文件

c# - 在真实和虚拟串行端口之间创建一对

vb.net - 跨线程操作无效

无法在赋值中将 'int [2][4]' 转换为 'int**'