Linux에서 셸 의 합계 및 파일 설명자(예: bash
)는 모두 동일한 장치 파일을 가리킵니다. 예를 들어 다음은 합계 및 파일 설명자 입니다 .stdin
stdout
stderr
stdin
stdout
stderr
bash
이제 /dev/tty1
읽고 쓸 수 있는 "실제" 파일이 아니라 파일이나 메모리의 버퍼 등을 가리키는 장치 파일입니다.
이제 내 질문은 /dev/tty1
하나의 파일만 가리키는가 아니면 두 개의 파일만 가리키는가입니다.
즉, bash
( )에서 읽을 때와 ( 또는 )에 쓸 때 ( )에서 읽는 것인지, ( )에 쓰는 것입니까?/dev/tty1
stdin
bash
/dev/tty1
stdout
stderr
같은 파일, 또는 /dev/tty1
두 개의 파일을 가리킵니다. 하나는 읽을 때 사용 /dev/tty1
하고 다른 하나는 쓸 때 사용합니다 /dev/tty1
.
답변1
장치 노드는 다음을 가리킨다.장비, Linux의 커널에 의해 처리됩니다. bash
에서 읽을 때는 /dev/tty1
첫 번째 터미널을 관리하는 장치 드라이버에서 읽고, 쓸 때는 동일한 장치 드라이버에 씁니다.
답변2
장치 파일은 "여러 파일을 가리키지" 않습니다. 장치 파일은 단일 파일을 "지정"하지도 않습니다. 장치 파일은 드라이버를 가리킵니다. 드라이버에는 읽기 및 쓰기 작업을 처리하는 코드가 포함되어 있습니다.
장치에서 읽은 데이터와 쓴 데이터 사이에 관계가 있을 필요는 없습니다. 일부 장치에는 있고 일부 장치에는 없습니다. 예를 들어, 디스크의 경우 특정 위치에서 읽은 데이터는 이전에 해당 위치에 기록된 데이터입니다. 반면에 직렬 포트를 사용하면 장치에 기록된 데이터가 직렬 회선을 통해 전송되고 장치에서 읽은 데이터가 직렬 회선을 통해 수신됩니다.
터미널은 직렬 장치와 매우 유사합니다. 실제로 역사적으로 물리적 터미널은 직렬 회선을 통해 연결되는 경우가 많았습니다. 애플리케이션이 터미널 파일을 읽을 때 터미널 드라이버 또는 터미널 에뮬레이터에서 보낸 데이터를 받습니다. 즉, 터미널 드라이버/에뮬레이터는 터미널 한쪽에 입력을 쓰고 애플리케이션은 터미널 한쪽에서 입력을 읽습니다. 응용 프로그램이 터미널 파일에 쓸 때 데이터를 보낸 다음 터미널 드라이버 또는 터미널 에뮬레이터에서 읽습니다. 응용 프로그램은 출력을 터미널의 한쪽에 쓰고 터미널 드라이버/에뮬레이터는 출력을 터미널로 읽습니다. . 옆.