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.

귀하의 질문에 답하기 위해, 이는 /proc/$pid/fd/$fdpid를 사용하여 실행되는 프로그램 내의 파일 설명자(등에서 반환됨)에 해당하며 열린 실제 파일(아직 존재하는 경우)에 대한 링크를 수행합니다.$fd$pidopen(2)

관련 정보