- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在寻找 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
产生 stdin
、stdout
和 stderr
在一起。
最佳答案
fd
代表文件描述符,它是对操作系统文件对象的引用。因为它是引用,所以多个不同的文件描述符可能引用同一个文件对象。
stdin
, stdout
, 和 stderr
是 FILE *
对象——指向 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/
我正在使用串行端口,在与之通信时,我必须使用tcsetattr()和TCSDRAIN模式更改配置。 TCSADRAIN The change should take place after a
出于某种原因调用超时程序,将内部具有 tcsetattr 的程序作为参数,从 bash 脚本导致 tcsetattr 挂起。在终端中直接在 bash 脚本之外调用它不会导致它挂起。为什么会这样?看着h
我在 Linux 中使用串行端口进行编码。 并且通信的要求是5ms inter-byte time。 而且它要求我在 write() 调用之前根据字节的值更改每个字节的奇偶校验模式(偶数和奇数)。 所
我正在编写一个 perl 脚本,它使用 ssh 在几个不同的服务器上启动一个脚本。只要此脚本正在运行,远程脚本就需要运行: #!/usr/bin/perl require 'config.cfg' #
我使用了 Google 的串行端口 API,但该函数始终返回 -1。我不知道该怎么办。 这个项目在我的 Mac 上运行成功,但在我的 Windows 和 Ubuntu 上运行错误。在 Windows
我读过 GNU manual for tcsetattr()它指出该函数具有三个参数:一个文件描述符、一个解释如何处理排队 I/O 的值 和一个指向 struct termios 的指针。但是,我不明
slave fd 被另一个应用程序(比如“A”)用作串口设备。 A 将设置其波特率/停止位等。我的应用需要此信息。 顺便说一句,有什么方法可以让只有主 fd 打开的进程收到所有 ioctl() 调用的
我是一名优秀的程序员,十分优秀!