在C程序中通过`open()`打开常规文件是否会创建文件`/proc/$pid/fd/$number`?

在C程序中通过`open()`打开常规文件是否会创建文件`/proc/$pid/fd/$number`?

在Linux中,我编写了一个C程序,它调用open()打开常规文件并返回文件描述符。

当我运行从 C 程序编译的可执行文件时,其进程创建一个文件是否正确 /proc/$pid/fd/$number,其中

  • $pid是进程的 pid,
  • $numberopen()与C程序中返回的文件描述符相同的整数吗?

是C 程序中/proc/$pid/fd/$number打开的常规文件的符号链接吗?open()

答案1

为什么不尝试一下呢?

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv) {
  int fd = open("333222.c", 0);
  printf("%d\n", fd);
  sleep(120);
  if (fd >= 0) {
    close(fd);
  }
}

将其另存为333222.c,编译并运行:

gcc -o 333222 333222.c
./333222 &

这将显示 pid 和文件描述符 (3);使用前者列出文件描述符:

ls -l /proc/.../fd

你会看到文件描述符 3 链接到333222.c.

为了回答您的问题,它确实对应于使用 pid 运行的程序内的/proc/$pid/fd/$fd文件描述符,如等返回的,并且确实链接到打开的实际文件(如果它仍然存在)。$fd$pidopen(2)

相关内容