【发布时间】:2015-12-23 09:18:18
【问题描述】:
我写了下面的代码来检查是否有两个进程,我们称它们为 pid1 和 pid2 与它们各自的文件描述符共享同一个进程。
1) 我在第一个进程中打开了一个文件。 2) 存储文件描述符。 3) 叉子 4)在子进程中打开同一个文件 5) 使用kcmp检查
fd1 = open("test", O_RDWR | O_TRUNC | O_CREAT, 0600);
pid1 = getpid();
pid2 = fork();
if (!pid2) {
pid2 = getpid();
fd2 = open("test", O_RDWR | O_TRUNC);
i = kcmp(pid1, pid2, 0, fd1, fd2);
printf("%d\n", i);
}
else
{
int status;
int s;
while ((s = wait(&status)) > 0);
}
为了检查这一点,我使用带有标志 KCMP_FILE(相当于 0)的系统调用 kcmp。然而,系统调用总是返回 1 或 2 而不是 0。
预期结果为 0,因为两个进程与其文件描述符共享相同的资源。
我误解了手册页还是我做错了什么来检查这个?
【问题讨论】:
标签: c file process kernel system-calls