gpt4 book ai didi

c - 通过tcsetattr(fd.....)设置终端属性时,fd可以是stdout还是stdin?

转载 作者:太空狗 更新时间:2023-10-29 11:28:56 26 4
gpt4 key购买 nike

我一直在寻找 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/dev/pty 产生 stdinstdoutstderr 在一起。

最佳答案

fd代表文件描述符,它是对操作系统文件对象的引用。因为它是引用,所以多个不同的文件描述符可能引用同一个文件对象。

stdin , stdout , 和 stderrFILE *对象——指向 stdio 的实际指针 FILE数据结构。您可以使用 fileno 获取引用底层操作系统对象的文件描述符。功能。

所以这里有两个间接级别。 FILE *都可以指代相同的 FILE ,但他们没有;有 3 个独立的 FILE stdin 的对象, stdout , 和 stderr .这些FILE每个对象都包含一个文件描述符,通常是 0、1 和 2(我说的是正常情况——OS/lib 以这种方式设置它们,只有在您的程序中明确更改它们时它们才会更改)。 3 个文件描述符通常都指向同一个底层操作系统对象,即单个终端对象。

因为(通常)只有一个终端,并且所有这些文件描述符(通常)都引用它,所以使用哪个 fd(0、1 或 2)作为 tcsetaddr 的第一个参数并不重要。 .

请注意,这些 fd 可能 s 引用不同的对象——如果您使用重定向(<> 在 shell 中)启动程序,那么其中一个或多个将引用其他文件对象而不是终端。

关于c - 通过tcsetattr(fd.....)设置终端属性时,fd可以是stdout还是stdin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com