运行期望从终端输入的程序我可以通过Ctrl + D“关闭”标准输入。 之后有什么方法可以重新打开stdin吗?
在linux和POSIXy系统中,当你在终端中按Ctrl + D时,标准输入描述符不会关闭; 它只是使伪终端层变得可读, read()
返回0.这就是POSIXy系统指示输入结束的方式。
这并不意味着文件描述符(甚至是C库顶部提供的流句柄)都会被关闭。 正如Steve Summit在评论中提到的那样,您只需要使用clearerr()
清除流的输入结束状态,以便能够读取更多数据; 这告诉C库您注意到状态发生了变化,但是还是想尝试进一步阅读。
当进程写入文件而另一个进程读取文件时,可能会发生类似情况。 当读者到达文件末尾时, read()
返回0,C库将其理解为输入结束; 它设置了一个内部标志,因此除非你调用clearerr()
,否则feof()
将为该流返回true。 现在,如果编写器写入更多数据,并且读者更clearerr()
,则读者可以读取新写入的附加数据。
这是完全正常的,也是预期的行为。
综上所述:
以上就是c/c++开发分享如何在Ctrl + D后重新启动stdin?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544690.html