我需要运行一个脚本并可以访问我程序中的默认stdin(终端输入)。我可以做./program“script”,通过程序打开并解析脚本,但是我想把它变成POSIX样式,接受来自管道或重定向的输入。
我的意思是,由于我的程序是一个解析器,我可以运行./program,键入脚本并仍然使用stdin(例如在scanf中)。但是我想运行./program<脚本,仍然可以使用stdin(在scanf中)。
我的程序是一个简化的Pascal解释器,这就是我需要在脚本中运行read(x)
和write(x)
的原因。
是的,它是家庭作业(解释者),但是在头脑风暴过程中出现了疑问。
答案 0 :(得分:2)
即使重定向了stdin,也可以使用/dev/tty
访问当前控制终端。
答案 1 :(得分:1)
ttyname(0)将返回与stdin关联的当前终端的文件名。然后你可以打开它并从中读取。
答案 2 :(得分:0)
如果我理解你在问什么,你就要求在使用文件重定向时从用户那里获取交互式输入,比如./program<上面的脚本。
我不相信有办法做到这一点。 POSIX系统将通过stdin提供脚本,就是这样。没有来自用户的互动。
值得注意的是,你没有必要做任何特别的事情来实现这一点。就像你通常那样对待stdin。您不必考虑它是以交互方式还是从文件中进行,这非常好。