Ctrl D后如何重启stdin?
运行一个期望从终端输入的程序我可以通过Ctrl D“关闭”stdin.之后有没有办法重新打开stdin?
解决方法
在
linux和POSIXy系统中,当您在终端中按Ctrl D时,标准输入描述符不会关闭;它只是使伪终端层变得可读,read()返回0.这就是POSIXy系统指示输入结束的方式.
这并不意味着文件描述符(甚至是C库顶部提供的流句柄)都会被关闭.正如Steve Summit在评论中提到的那样,您只需要使用clearerr()清除流的结束输入状态,以便能够读取更多数据;这告诉C库您注意到状态发生了变化,但是还是想尝试进一步阅读. 当进程写入文件而另一个进程读取文件时,可能会发生类似的情况.当读者到达文件末尾时,read()返回0,C库将其理解为输入结束;它设置了一个内部标志,因此除非你调用clearerr(),否则feof()将为该流返回true.现在,如果编写器写入更多数据,并且读取器更清晰(),则读者可以读取新写入的附加数据. 这是完全正常的,也是预期的行为. 综上所述: >输入结束由read()操作返回0指示,但文件描述符状态不会改变,可以正常使用. 当发生这种情况时,大多数程序都会退出,但这是一种惯例,而不是技术要求. 这在 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |