我需要用c语言编写一个读取和解析STDIN的程序。这是我的问题:我已经处理了STDIN中的几个错误案例(错误的格式等)。但是,如果没有提供任何内容,程序将继续侦听用户输入。我希望它抛出一个错误,比如"Nothing to read“。这有可能吗?
发布于 2015-07-29 11:41:32
如果您使用的是类UNIX操作系统,则可以使用select()等待一段预定的时间进行输入,如果不是这样,则继续执行。
对于等待来自大量不同文件描述符中的任何一个的输入,它都非常方便,但如果您愿意,也可以很容易地单独用于标准输入。
或者,如果您确定它来自终端,则可以查看终端函数,使用tcgetattr()和tcsetattr()将终端置于非规范模式并设置超时:
#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没有规定的这两个。
发布于 2015-07-29 11:59:28
你的问题,就像措辞一样,没有意义。如果输入来自类似管道的东西,那么在更多的输入到达之前,不可能知道需要多久。(在有读取器之前,对另一端的写入将会失败,尽管通常父进程仍然会被算作读取器,即使它实际上并没有尝试读取)。
但是,如果您只想在输入是交互的情况下防止挂起,那么只需使用isatty(3),在这种情况下不要阅读。
https://stackoverflow.com/questions/31690788
复制相似问题