c/c++语言开发共享如何在Ctrl + D后重新启动stdin?

运行期望从终端输入的程序我可以通过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

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐