%60%EC%9D%84%20%ED%86%B5%ED%95%B4%20%EC%9D%BC%EB%B0%98%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%97%B4%EB%A9%B4%20%60%2Fproc%2F%24pid%2Ffd%2F%24number%60%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%83%9D%EC%84%B1%EB%90%A9%EB%8B%88%EA%B9%8C%3F.png)
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
.
귀하의 질문에 답하기 위해, 이는 /proc/$pid/fd/$fd
pid를 사용하여 실행되는 프로그램 내의 파일 설명자(등에서 반환됨)에 해당하며 열린 실제 파일(아직 존재하는 경우)에 대한 링크를 수행합니다.$fd
$pid
open(2)