如何知道我们是否使用fcntl和F_GETOWN得到错误或组ID?

时间:2018-11-25 19:00:48

标签: c process linux-kernel system-calls file-descriptor

以下是使用fcntl来操纵文件描述符的语法:

val = fcntl(fd, F_GETOWN, 0)

在文档中提到该命令返回正进程ID或负进程组ID。

还提到了-1的值表示发生了错误。

如何确定该函数是否有错误或返回了组ID的负值?

1 个答案:

答案 0 :(得分:3)

-1是一个错误。其他负值是进程组ID。要为此功能引用the Single UNIX specification(强调我的意思):

  

F_GETOWN

     

如果 fildes 引用套接字,请获取指定的进程ID或进程组ID,以在可用带外数据时接收SIGURG信号。正值应表示进程ID;负值(<-1>而不是-1 )应表示进程组ID;零值将指示不发送SIGURG信号。如果 fildes 不引用套接字,则结果不确定。

请记住,进程组ID -1并没有多大意义。这意味着pid 1(即init)是进程组的领导者。在任何正常系统中都是不可能的,并且会产生不良影响。