【问题标题】:Is stdin and console and keyboard input same标准输入和控制台和键盘输入是否相同
【发布时间】:2010-12-27 07:26:20
【问题描述】:

C 语言中的标准输入、控制台和键盘输入是否相同?

【问题讨论】:

    标签: c stdin


    【解决方案1】:

    来自isatty(3) 手册页:

    isatty() 函数测试 fd 是否是指向终端的打开文件描述符。

       #include <unistd.h>
    
       int isatty(int fd);
    

    isatty() 如果 fd 是指向终端的打开文件描述符,则返回 1;否则返回0,设置errno表示错误。

    所以,isatty(stdin) 在输入时返回非零值,如果被重定向则返回零值。

    【讨论】:

    • 这表示stdin和console不一样。
    • isatty() 接近了,尽管终端不一定由键盘或用户输入驱动,但是以编程方式驱动它的情况是程序的行为就像它正在接收一样键盘输入。
    【解决方案2】:

    是的,没错。你基本上可以有一个 read() 系统调用来接受来自标准输入的输入。

    【讨论】:

      【解决方案3】:

      不一定。 stdin 可以从文件(例如executable &lt; input)或其他一些非交互式设备重定向。

      amphetamachine 的答案为您提供了区分差异的工具。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        • 2019-09-03
        相关资源
        最近更新 更多