gpt4 book ai didi

c - C 中的 tcgetpgrp 函数

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

语法:

   pid_t tcgetpgrp(int fd);

在手册页中:

The function tcgetpgrp() returns the process group ID of the foreground process group on the terminal associated to fd, which must be the controlling terminal of the calling process.`

所以,利用这个函数我们可以得到终端的前台进程。但是我不明白哪个文件描述符传递给了这个函数。传递给这个函数的文件描述符有什么用,为什么?

最佳答案

The Open Group 基础规范第 6 期IEEE Std 1003.1,2004 年版说:

11.1.2 Process Groups

A terminal may have a foreground process group associated with it. This foreground process group plays a special role in handling signal-generating input characters, as discussed in Special Characters.

tcgetpgrp 是可以返回附加到给定终端的该组 ID 的函数。该参数必须是与终端关联的文件描述符,不仅如此,它还必须是进程控制终端的描述符:

11.1.3 The Controlling Terminal

A terminal may belong to a process as its controlling terminal. Each process of a session that has a controlling terminal has the same controlling terminal.

简而言之,控制终端是让您在 shell 中管理作业的对象: dispatch CTRL-Z 暂停作业,将作业置于前台,使用 CTRL-C 取消作业等。控制终端允许您控制附加到此终端的进程组。这种控制可能包括:终端的并发访问、 session 管理、前台/后台等。

ctermid 可能会给您控制终端的路径(tty 命令行也一样)。请注意,控制终端可能与您在其上进行标准 I/O 的终端不同,但通常是相同的。然后,您可以(非常普遍地)使用 STDIN_FILENO(以及其他两个)。您还可以使用 isatty 来确定文件描述符是否与终端关联。

关于c - C 中的 tcgetpgrp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33343265/

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