代码之家  ›  专栏  ›  技术社区  ›  Spidey

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

  •  2
  • Spidey  · 技术社区  · 15 年前

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

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

    我的程序是一个简化的Pascal解释器,所以我需要运行 read(x) write(x) 在我的剧本里。

    是的,这是家庭作业(intepreter),但在头脑风暴的过程中,怀疑突然出现。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Nick Lewis    15 年前

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

        2
  •  2
  •   mark4o    15 年前

    可使用 /dev/tty ,即使stdin已被重定向。

        3
  •  0
  •   Brian Arnold Sinclair    15 年前

    如果我理解您的要求,您将要求在使用文件重定向时能够接受用户的交互式输入,如上面的./program<脚本位。

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

    同样值得注意的是,你不必做任何特殊的事情来意识到这一点。像平常一样对待性传播疾病。你不必考虑它是以交互方式还是从一个文件来的,这真的很好。