$ ls -og /proc/self /proc/self/fd
lrwxrwxrwx 1 64 Jun 18 11:12 /proc/self -> 32157
/proc/self/fd:
total 0
lrwx------ 1 64 Jun 22 2012 0 -> /dev/tty1
lrwx------ 1 64 Jun 22 2012 1 -> /dev/tty1
lrwx------ 1 64 Jun 22 2012 2 -> /dev/tty1
lr-x------ 1 64 Jun 22 2012 3 -> /proc/32157/fd
기본 할당 파일 설명자 3은 무엇입니까?
답변1
없음: STDIN, STDOUT 및 STDERR의 세 가지 표준 파일 설명이 있습니다. 각각 0, 1, 2가 할당됩니다.
여러분이 보고 있는 것은 ls(1)
이것이 어떻게 작동하는지에 대한 인공물입니다. 디렉토리의 내용을 읽고 표시하려면 /proc/self/fd
디렉토리가 열려 있어야 합니다.
즉, 일반적으로 사용 가능한 첫 번째 핸들인 파일 핸들을 얻습니다. 따라서 3.
cat
별도의 콘솔에서 실행하여 검사하면 /proc/${pid}/fd
처음 3개만 할당된 것을 볼 수 있습니다.
답변2
이는 실행 중인 프로세스의 파이프를 읽는 데에도 사용할 수 있습니다.
$ head /proc/21028/fd/3
declare -ax a_name='([0]="
8006333 (10.161.154.1)" [1]="
6006583 (10.179.231.1)" [2]="
9001437 (10.125.167.1)" [3]="
2003192 (10.138.247.1)" [4]="
4005015 (10.120.139.1)" [5]="
$ grep -n printf pol-grab.sh | grep ^54
54: export add_the_name="$(printf "%s\n" "$(declare -p a_name)")"
답변3
#include <fcntl.h>
#include <stdio.h>
int main(void)
{
int fd1;
int fd2;
char buffer1[] = "a.txt";
char buffer2[] = "b.txt";
fd1 = open(buffer1, O_WRONLY);
fd2 = open(buffer2, O_WRONLY);
printf("%d\n", fd1);
printf("%d\n", fd2);
}
두 개의 서로 다른 파일(a.txt 및 b.txt)을 만들 수 있으며 open()을 사용하면 서로 다른 파일 설명자를 얻게 됩니다. 제 경우에는 3,4개였습니다.
3
4
0,1,2에는 기본값과 의미가 있기 때문에
- 0: STDIN(표준 입력)
- 1: STDOUT(표준 출력)
- 2: STDERR(표준 오류)