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

时间:2016-10-24 09:22:26

标签: c linux serial-port

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

请随时询问情况是否不清楚。谢谢您的时间

编辑: 拔下电缆时,它返回零。

read()

3 个答案:

答案 0 :(得分:2)

拔下串行电缆只会导致数据无法再到达,但没有真正的连接"伤口被某种方式打断了。

您的串口现在只注意到没有进一步的" 0"当线现在仍然在" 1"不断。

因此,驱动程序只是看到没有任何数据,但并不是因为拔下插头时无法提供任何数据。

答案 1 :(得分:0)

拔下串口线后,

read不会返回错误。

我将用这个小例子解释你:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

#define READ_SIZE 2047

int     main(void)
{
  char  str[READ_SIZE + 1];
  int   ret;
  int   fd;

  fd = open("test.txt", O_RDONLY | O_CREAT); // create a file
  system("rm test.txt"); // delete the file
  ret = read(fd, str, READ_SIZE); // read on a file that doesn't exist
  printf("%d\n", ret); // print the return value of read
  close(fd);
  return (0);
}

此程序将打印0,而不是-1,因为read不会将此视为错误,只是看到它们无需阅读并返回数字字节为红色或0。

答案 2 :(得分:-2)

在这种情况下,

read不会返回错误。因为已经读取了多个字节(零个或多个)。

根据read手册页:

  

如果此数字(返回值)小于数字,则不是错误   要求的字节数;这可能发生在例如因为更少的字节   实际上是可用的(也许是因为我们接近   文件结束,或者因为我们正在读取管道或从管道读取   终端),或因为read()被信号中断。

您可以检查read是否返回-1。然后,检查errno是否有错误详情。