기본 할당 파일 설명자 3은 무엇입니까?

기본 할당 파일 설명자 3은 무엇입니까?
$ 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(표준 오류)

관련 정보