嗨谁能告诉我 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;
}
快速浏览一下您的手册页就会发现:
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)按照约定设置为当程序从终端运行时指向您的终端。
isatty()
是一个函数,如果 fd -(文件描述符)引用终端,则返回 1
。
它属于#include
#include <unistd.h>
它告诉文件描述符是否连接到终端。
您可以在这里阅读更多相关信息:http://linux.die.net/man/3/isatty
检查参考:
isatty - 测试文件描述符是否引用终端
”但是 isatty() 所取参数的含义是什么?”
该参数是标准 I/O 库文件描述符表的索引。索引 0、1 和 2 保留给
stdin
、stdout
和 stderr
。所有其他索引均指您可以/已经打开的文件描述符。
Isatty() 用于检查 fd(文件描述符)属于终端或命令行提示符。 当该函数属于终端时,该函数为您提供二进制值 1 它在包含以下内容的代码中使用 头文件中的 unistd.h 关键字 如果 fd 是指向终端的打开文件描述符,isatty() 给出 1;否则返回 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
}
是
tty
=is it a Teleprinter
吗?这是古老的术语,现在的意思是 = is it a terminal with a keyboard?
这向软件设计师/工程师暗示,可能有人在循环中进行观察或控制。
它是终端吗?然后格式化输出,它可能会被人看到。
这不是终端吗?不要格式化输出,你会用不必要的换行符和符号弄乱日志。