如何使用 fcntl 和 F_GETOWN 知道我们是否收到错误或组 ID?
How to know if we get an error or a group ID using fcntl and F_GETOWN ?
这里是使用fcntl
操作文件描述符的语法:
val = fcntl(fd, F_GETOWN, 0)
文档中提到此命令 returns 一个正进程 ID 或一个负进程组 ID。
并且还提到值 -1
表示发生了错误。
如何确定函数是否有错误或返回了组 ID 的负值?
-1 是一个错误。其他负值是进程组 ID。为这个函数引用 the Single UNIX specification(强调我的):
F_GETOWN
If fildes refers to a socket, get the process ID or process group ID specified to receive SIGURG signals when out-of-band data is available. Positive values shall indicate a process ID; negative values, other than -1, shall indicate a process group ID; the value zero shall indicate that no SIGURG signals are to be sent. If fildes does not refer to a socket, the results are unspecified.
请记住,-1 的进程组 ID 无论如何都没有多大意义。这意味着 pid 1(即 init
)是进程组的领导者。这在任何正常系统中都是不可能的,并且会产生不良影响。
这里是使用fcntl
操作文件描述符的语法:
val = fcntl(fd, F_GETOWN, 0)
文档中提到此命令 returns 一个正进程 ID 或一个负进程组 ID。
并且还提到值 -1
表示发生了错误。
如何确定函数是否有错误或返回了组 ID 的负值?
-1 是一个错误。其他负值是进程组 ID。为这个函数引用 the Single UNIX specification(强调我的):
F_GETOWN
If fildes refers to a socket, get the process ID or process group ID specified to receive SIGURG signals when out-of-band data is available. Positive values shall indicate a process ID; negative values, other than -1, shall indicate a process group ID; the value zero shall indicate that no SIGURG signals are to be sent. If fildes does not refer to a socket, the results are unspecified.
请记住,-1 的进程组 ID 无论如何都没有多大意义。这意味着 pid 1(即 init
)是进程组的领导者。这在任何正常系统中都是不可能的,并且会产生不良影响。