如何在使用文件重定向时访问默认的stdin?

时间:2009-06-30 20:30:47

标签: c file posix stdin

我需要运行一个脚本并可以访问我程序中的默认stdin(终端输入)。我可以做./program“script”,通过程序打开并解析脚本,但是我想把它变成POSIX样式,接受来自管道或重定向的输入。

我的意思是,由于我的程序是一个解析器,我可以运行./program,键入脚本并仍然使用stdin(例如在scanf中)。但是我想运行./program<脚本,仍然可以使用stdin(在scanf中)。

我的程序是一个简化的Pascal解释器,这就是我需要在脚本中运行read(x)write(x)的原因。

是的,它是家庭作业(解释者),但是在头脑风暴过程中出现了疑问。

3 个答案:

答案 0 :(得分:2)

即使重定向了stdin,也可以使用/dev/tty访问当前控制终端。

答案 1 :(得分:1)

ttyname(0)将返回与stdin关联的当前终端的文件名。然后你可以打开它并从中读取。

答案 2 :(得分:0)

如果我理解你在问什么,你就要求在使用文件重定向时从用户那里获取交互式输入,比如./program<上面的脚本。

我不相信有办法做到这一点。 POSIX系统将通过stdin提供脚本,就是这样。没有来自用户的互动。

值得注意的是,你没有必要做任何特别的事情来实现这一点。就像你通常那样对待stdin。您不必考虑它是以交互方式还是从文件中进行,这非常好。