C 中 isatty() 的作用是什么?

问题描述 投票:0回答:8

嗨谁能告诉我 c 中 isatty() 的参数是什么? 我有以下代码,但我不明白第一个输出的三个数字是 1,剩下的都是 0。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
        for(int i=0;i<100;i++){
                int t=isatty(i);
                printf("%d",t);
        }
        return 0;
}
c linux
8个回答
21
投票

快速浏览一下您的手册页就会发现:

int isatty(int fildes);

DESCRIPTION
     The isatty() function tests whether  fildes,  an  open  file
     descriptor, is associated with a terminal device.

进一步调查将导致您发现文件描述符 0、1 和 2(又名 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO)按照约定设置为当程序从终端运行时指向您的终端。


5
投票

isatty()
是一个函数,如果 fd -(文件描述符)引用终端,则返回
1

它属于#include

#include <unistd.h>

1
投票

它告诉文件描述符是否连接到终端。

您可以在这里阅读更多相关信息:http://linux.die.net/man/3/isatty


1
投票

检查参考

isatty - 测试文件描述符是否引用终端


1
投票

但是 isatty() 所取参数的含义是什么?

该参数是标准 I/O 库文件描述符表的索引。索引 0、1 和 2 保留给

stdin
stdout
stderr
。所有其他索引均指您可以/已经打开的文件描述符。


0
投票

Isatty() 用于检查 fd(文件描述符)属于终端或命令行提示符。 当该函数属于终端时,该函数为您提供二进制值 1 它在包含以下内容的代码中使用 头文件中的 unistd.h 关键字 如果 fd 是指向终端的打开文件描述符,isatty() 给出 1;否则返回 0


0
投票

如果您仍然感兴趣,我几年前就接触过 MSDOS 实现。

/*
** Return "true" if fd is a device, else "false"
*/
isatty(fd) int fd; {
  fd;               /* fetch handle */
  #asm
    push bx         ; save 2nd reg
    mov  bx,ax      ; place handle
    mov  ax,4400h   ; ioctl get info function
    int 21h         ; call BDOS
    pop  bx         ; restore 2nd reg
    mov  ax,dx      ; fetch info bits
    and  ax,80h     ; isdev bit
  #endasm
 }

0
投票

tty
=
is it a Teleprinter
吗?这是古老的术语,现在的意思是 =
is it a terminal with a keyboard?

这向软件设计师/工程师暗示,可能有人在循环中进行观察或控制。

它是终端吗?然后格式化输出,它可能会被人看到。

这不是终端吗?不要格式化输出,你会用不必要的换行符和符号弄乱日志。

© www.soinside.com 2019 - 2024. All rights reserved.