繁体   English   中英

如何阻止读取系统调用

[英]How to block the read system call

我不明白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读取将阻塞,直到用户键入内容为止。 如果我们没有从另一方接收数据,则从套接字读取将阻止。 从管道读取将阻塞,直到管道另一侧的程序写入内容。

你的理解是正确的。 read()仅在从已连接的管道或网络套接字读取时阻止。

这里

read()尝试从buf开始读取从文件描述符fd到缓冲区的字节数。

在常规文件上没有read块,如果常规文件为空,则返回0(如您所见)预期意味着从文件中读取0个字节..文件类型(例如FIFO /管道)支持阻止行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM