我一直在研究人 3 tcgetattr http://linux.die.net/man/3/tcgetattr(因为我想更改程序中的终端设置)并找到了这个。
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions,
const struct termios *termios_p);
问题:
我想知道什么fd
应该是什么意思? (好像是stdin
,但我不明白为什么)?
背景
我的理解是终端是输入和输出在一起,因为我的理解是/dev/tty
or /dev/pty
yields stdin
, stdout
and stderr
一起。
fd
代表文件描述符,它是对操作系统文件对象的引用。因为它是一个引用,所以多个不同的文件描述符可能引用同一个文件对象。
stdin
, stdout
, and stderr
are FILE *
对象——指向 stdio 的实际指针FILE
数据结构。您可以使用以下命令获取引用底层操作系统对象的文件描述符fileno
功能。
所以这里有两个间接级别。这FILE *
都可以指同一个FILE
,但他们没有;有3个独立的FILE
对象为stdin
, stdout
, and stderr
。这些FILE
每个对象都包含一个文件描述符,通常为 0、1 和 2(我说的是通常 - 操作系统/lib 以这种方式设置它们,并且只有在程序中显式更改它们时它们才会更改)。这 3 个文件描述符通常都会引用同一个底层操作系统对象,即单个终端对象。
由于(通常)只有一个终端,并且所有这些文件描述符(通常)都引用它,因此使用哪个 fd(0、1 或 2)作为第一个参数并不重要tcsetaddr
.
请注意,它is对于这些可能fd
s 来引用不同的对象——如果您使用重定向启动程序(<
or >
在 shell 中),那么其中一个或多个将引用其他文件对象而不是终端。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)