读取文件描述符挂起

read file descriptor HANGS

我有一个非常简单的源文件读取文件描述符,挂起。 有人能注意到代码的问题吗?

第一个是有问题的来源,第二个是在网上找到的有效来源。两个来源几乎相同。

一个有趣的巧合,您正在阅读 stdin。这是因为在您的 if(in = ... 中您放错了一些括号。

发生的事情是首先对 open(argv[1], O_RDONLY)<0 求值,然后将结果放入 in。由于 open() 的结果不小于零(在成功打开时),因此 in 变为 0。并且 stdin 是文件描述符的名称,它为零(在大多数系统上)。所以它是一个有效的文件描述符,read 很乐意从中读取。它只是没有得到任何东西,直到你在你的控制台中输入一些东西。

快速修复:

if ( (in = open(argv[1], O_RDONLY)) < 0) {