이 질문이 너무 추상적이지 않고 스택 전체에 걸쳐 많은 소프트웨어가 관련되어 있기를 바랍니다.
우리 모두는 /dev/stdin, /dev/stdout 및 /dev/stderr을 알고 있습니다. 새로운 표준 스트림 /dev/stdjson을 생성하려면 어떻게 해야 합니까? 이를 지원하려면 어떤 소프트웨어가 필요합니까? 나는 그렇지 않다고 가정한다.필요필요에 따라 스트림을 열 수 있도록 파일 설명자 /dev/stdjson을 각 프로그램에 전달합니다. 그렇다면 새로운 표준 스트림을 어디에 추가할 수 있나요? 쉘의 일부인 커널 모듈이어야 합니까?
답변1
표준 스트림에 관한 것은 프로세스가 시작될 때 사용 가능한 것으로 가정된다는 것입니다. 즉, 파일 설명자를 의미합니다예각 프로그램에 전달됩니다. (심지어 허용되기도 함시스템이 이러한 파일 설명자에서 지정되지 않은 일부 파일을 열도록 하십시오. 그렇지 않으면 나중에 닫힌 상태로 유지됩니다 execve()
. ) 이러한 스트림을 표준으로 만드는 또 다른 점은 C 런타임 라이브러리가 FILE
표준 입력, 출력 및 오류에 해당하는 개체를 생성하여 사용자 프로그램이 예를 들어 fprintf()
다른 기능을 즉시 사용할 수 있다는 것입니다.stdio.h
"장치" /dev/stdin
등은 이와 관련이 없으며 오히려 다음을 통해 이러한 파일 설명자(또는 기본 파일)에 액세스하는 시스템별 방법입니다.이름. Linux에서 보면 이는 현재 프로세스의 파일 설명자 0에 대한 마법의 커널 인터페이스인 자체를 /dev/stdin
가리키는 심볼릭 링크입니다 . /proc/self/fd/0
그것이 없으면 fd open /dev/stdin
자체는 아무것도 하지 않을 것입니다.
따라서 새로운 "표준 스트림"을 추가하려면 C 라이브러리를 변경해야 하며, 프로그램을 시작할 때 fds 0, 1, 2를 특별히 처리하는 일부 프로그램도 변경해야 합니다.
그러나 요청 시 파일을 여는 프로세스에 대해 이야기하고 있다면 이는 표준 스트림과 약간 다르게 들립니다. 물론, 프로그램이 존재한다고 가정할 수 있는 위치에 명명된 파일을 생성할 수 있습니다. 그러나 파일이 사용되는 용도와 일반 파일인지, 파이프인지, 소켓인지는 모두 실제로 수행하려는 작업에 따라 다릅니다. 또한 특정 프로그램이나 프로그램 그룹에 /var/lib/mytool
관련된 것이라면 /dev/
.