c - 如何阻止读取系统调用

标签 c linux io

我不明白 read() 系统是如何阻塞的。我创建了一个空文件并尝试使用 read() 系统调用进行读取。它返回 0。

fd = open("Demo.txt",O_RDONLY);
n = read(fd,&ch,10); // returns 0 

我希望 read() 无限期阻塞,因为文件中没有数据。 read() 是否将 EOF 视为有效数据并立即返回?我的理解正确吗?

最佳答案

是的,EOF 会导致 read() 立即返回,而不是阻塞。当您到达 EOF 时,read() 不会等待更多数据写入文件;它立即返回 0 个字节。从磁盘文件读取时,阻塞不会起作用,除了将磁盘上的数据读入内存时通常难以察觉的延迟。

它在使用 TTY、套接字和管道时更为相关。例如,当 stdin 连接到终端时,从 stdin 读取将阻塞,直到用户键入内容。如果我们没有从另一端接收到数据,从套接字读取将阻塞。从管道读取将阻塞,直到管道另一端的程序写入内容。

关于c - 如何阻止读取系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14713800/

相关文章:

c - C 中的数字求和

JAVA:如何自动将唯一ID号写入.CSV文件

linux - 使用shell脚本读取OpenWrt中的最后一行串口

java I/O,将数组写入文本文件

c - 类似于 Linux 的 C 库中的 SetFileLength() 的函数

c - 运行以下文件处理 C 程序时,为什么输出不符合预期?

c - 为什么我会收到此错误和警告?错误和警告在描述中

在 C 语言中转换为字节

c - 有没有办法将进程锁定到 CPU?

linux - 在不在 bash 中打开文件的情况下对文件进行理智的更改?