hum*_*ace 4 c linux terminal termios
我一直在寻找man 3 tcgetattr(因为我想更改程序中的终端设置)并找到了这个。
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions,
const struct termios *termios_p);
Run Code Online (Sandbox Code Playgroud)
我想知道fd应该是什么意思?(似乎是stdin,但我不明白为什么)?
我的理解是终端是一起输入和输出,因为我的理解是 a/dev/tty或/dev/ptyyields stdin,stdout以及stderr一起。
fd代表文件描述符,它是对操作系统文件对象的引用。因为它是一个引用,多个不同的文件描述符可能引用同一个文件对象。
stdin, stdout, 和stderr是FILE *对象——指向stdio数据FILE结构的实际指针。您可以使用该fileno函数获取引用底层 OS 对象的文件描述符。
所以这里有两个间接级别。TheFILE *都可以指同一个FILE,但它们不是;有3个独立FILE的对象stdin,stdout和stderr。这些FILE对象每个都包含一个文件描述符,通常为 0、1 和 2(我通常说的是 - OS/lib 以这种方式设置它们,并且只有在您在程序中明确更改它们时它们才会更改)。这 3 个文件描述符通常都指向同一个底层 OS 对象,它是一个单一的终端对象。
由于(通常)只有一个终端,并且所有这些文件描述符(通常)都引用它,因此将哪个 fd(0、1 或 2)用作tcsetaddr.
请注意,这是可能的,这些fds到引用不同的对象-如果你开始重定向程序(<或>在shell),那么一个或多个的他们会参考一些其他的文件对象,而不是终端。
| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |