检查资源是否由不同的进程共享

时间:2015-09-25 13:58:56

标签: c file process kernel system-calls

我编写了以下代码,以便检查是否有两个进程,让我们称它们为pid1和pid2与它们各自的文件描述符共享相同的进程。

1)我在第一个过程中打开一个文件。 2)存储文件描述符。 3)叉子 4)在子进程中打开相同的文件 5)使用kcmp检查

if request.method == 'GET':

要检查这一点,我使用带有标志KCMP_FILE(相当于0)的syscall kcmp。但是,系统调用始终返回1或2而不是0。

预期结果为0,因为两个进程与其文件描述符共享相同的资源。

我是否误解了手册页,或者我做错了什么来检查这个?

1 个答案:

答案 0 :(得分:1)

  

我是否误解了手册页,或者我做错了什么来检查这个?

您误解了man page,其中说明了这一点:

KCMP_FILE
          Check whether a file descriptor idx1 in the process pid1
          refers to the same open file description (see open(2)) as file
          descriptor idx2 in the process pid2.

具体措辞是慎重且非常重要的:对于KCMP_FILEkcmp()确定FD是否引用相同的打开文件描述 ,这与引用相同的底层文件非常不同。在引用open(2)后,我们发现:

  

open()的调用会创建一个新的打开的文件说明,这是一个条目   系统范围的打开文件表。

(强调补充说。)你有两次拨打open()。每个都创建自己的新打开文件描述。这些是不一样的,即使它们引用相同的文件,kcmp()告诉你。我知道在同一进程中获取两个不同的FD的唯一方法是引用相同的打开文件描述,这是通过dup()函数族。