在Linux中,我编写了一个C程序,它调用open()
打开常规文件并返回文件描述符。
当我运行从 C 程序编译的可执行文件时,其进程创建一个文件是否正确 /proc/$pid/fd/$number
,其中
$pid
是进程的 pid,$number
open()
与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
$pid
open(2)