似乎以下调用执行了您所期望的操作(关闭流并不允许任何进一步的输入 - 等待流上的输入的任何操作都会返回错误),但它是否保证在所有编译器/平台上都是正确的?
close(fileno(stdin));
fclose(stdin);
fclose(stdin)
导致任何进一步使用stdin
(隐式或显式)调用未定义的行为,这是一个非常糟糕的事情。它不会“禁止输入”。
close(fileno(stdin))
导致任何进一步的输入尝试stdin
,当前缓冲区耗尽后,失败EBADF
,但前提是您打开另一个文件,在这种情况下该文件将变为 fd #0 并且坏事将会发生.
更稳健的方法可能是:
int fd = open("/dev/null", O_WRONLY);
dup2(fd, 0);
close(fd);
添加了一些错误检查。这将确保所有读取(当前缓冲区耗尽后)都会导致错误。如果您只是希望它们导致 EOF,而不是错误,请使用O_RDONLY
代替O_WRONLY
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)