我不明白read()系统是如何阻塞的.我创建了一个空文件并尝试使用read()系统调用进行读取.它返回0.
fd = open("Demo.txt",O_RDONLY);
n = read(fd,&ch,10); // returns 0
Run Code Online (Sandbox Code Playgroud)
我期待read()无限期地阻止,因为文件中没有数据.read()会将EOF视为有效数据并立即返回吗?我的理解是否正确?
是的,EOF会导致read()立即返回,而不是阻塞.当你到达EOF时,read()不会等待更多的数据写入文件; 它立即返回0个字节.除了磁盘上的数据被读入内存时通常难以察觉的延迟之外,从磁盘上读取文件时阻塞不起作用.
使用TTY,套接字和管道时更相关.例如,当stdin连接到终端时从stdin读取将阻塞,直到用户键入内容为止.如果我们没有从另一方接收数据,则从套接字读取将阻止.从管道读取将阻塞,直到管道另一侧的程序写入内容.