首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除非STDIN为空,否则从STDIN读取

除非STDIN为空,否则从STDIN读取
EN

Stack Overflow用户
提问于 2015-07-29 11:35:42
回答 2查看 131关注 0票数 3

我需要用c语言编写一个读取和解析STDIN的程序。这是我的问题:我已经处理了STDIN中的几个错误案例(错误的格式等)。但是,如果没有提供任何内容,程序将继续侦听用户输入。我希望它抛出一个错误,比如"Nothing to read“。这有可能吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-29 11:41:32

如果您使用的是类UNIX操作系统,则可以使用select()等待一段预定的时间进行输入,如果不是这样,则继续执行。

对于等待来自大量不同文件描述符中的任何一个的输入,它都非常方便,但如果您愿意,也可以很容易地单独用于标准输入。

或者,如果您确定它来自终端,则可以查看终端函数,使用tcgetattr()tcsetattr()将终端置于非规范模式并设置超时:

代码语言:javascript
复制
#include <termios.h>
struct termios tio;
tcgetattr(fd, &tio);             // Get current
tio.c_lflag &= ~ICANON;          // Non-canonical
tio.c_cc[VTIME] = 50;            // Five second timeout
tcsetattr(fd, TCSANOW, &tio);    // Set new

不幸的是,标准(ISO) C没有规定的这两个。

票数 2
EN

Stack Overflow用户

发布于 2015-07-29 11:59:28

你的问题,就像措辞一样,没有意义。如果输入来自类似管道的东西,那么在更多的输入到达之前,不可能知道需要多久。(在有读取器之前,对另一端的写入将会失败,尽管通常父进程仍然会被算作读取器,即使它实际上并没有尝试读取)。

但是,如果您只想在输入是交互的情况下防止挂起,那么只需使用isatty(3),在这种情况下不要阅读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31690788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档