我是C和Linux的新手。我正在尝试使用root
系统调用从串行端口读取一些数据,并且它运行正常。问题是即使我在代码运行时拔下串行电缆,read()
也没有返回负值。请帮助
请随时询问情况是否不清楚。谢谢您的时间
编辑: 拔下电缆时,它返回零。
read()
答案 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
是否有错误详情。