파일 설명자란 무엇입니까? 왜 필요한가요?
답변1
파일 설명자는 프로세스 내에서 열린 파일을 나타내는 숫자입니다. 이는 프로그램이 어떤 파일에서 작업하고 있는지 기억하는 방법입니다. 파일을 열면 사용 가능한 번호를 찾아 프로세스의 파일 설명자 테이블에 있는 파일에 할당합니다. 파일을 닫으면 프로세스 설명자 테이블에서 해당 항목이 제거됩니다. 파일 설명자 간에는 관계가 없습니다.N한 프로세스의 파일 디스크립터와 다른 프로세스의 동일한 번호를 가진 파일 디스크립터.
"모든 파일에는 세 가지(stdin, stdout, stderr)가 있습니다"는 말도 안됩니다.프로세스파일이 아닌 파일 설명자가 있습니다. 프로세스에는 일반적으로 3개 이상의 파일 설명자가 있을 수도 있고 더 적은 수의 파일 설명자가 있을 수도 있습니다. Stdin, stdout 및 stderr은 일반적인 의미를 갖기 때문에 파일 설명자 0, 1 및 2의 이름입니다. stdin(표준 입력)은 프로그램이 사용자 입력(필요한 경우)을 읽어야 하는 위치이고, stdout(표준 출력)은 프로그램은 생성된 데이터가 기록되는 위치(필요한 경우) 및 stderr(표준 오류)가 오류 메시지에 사용됩니다. Stdin과 stdout은 명령줄, 특히 파이프에서 사용하도록 고안된 프로그램과 함께 사용할 수 있습니다.STDOUT과 STDIN을 연결한다는 것은 무엇을 의미합니까?그리고 (더 발전된)명령에 어떻게 여러 출력이 있을 수 있나요?
답변2
int로 표현됩니다.
예, 0부터 시작하여 번호가 매겨집니다. 이는 유사한 유형의 고유한 항목을 계산하는 일반적이고 간단한 방법입니다. 스웨트셔츠 같은 느낌이에요. 예를 들어, 한 팀에 여러 명의 골키퍼가 있을 수 있지만 팀의 각 구성원은 고유한 번호를 갖고 있으므로 주어진 순간에 어떤 골키퍼가 경기하고 있는지 알 수 있습니다. 이것이 유일한 의미입니다.
파일 설명자란 무엇입니까?
입력/출력 도관을 나타냅니다. 일반적으로 그들은 둘 중 하나이지만 둘 다일 수도 있습니다.
각 파일에는 3개의
일반적으로 매프로세스최소한 세 가지가 있으며 이는 *nix 스타일 운영 체제의 특징입니다.
왜 필요한가요?
현재 프로세스가 아닌 다른 것에 대한 입력/출력을 원하지 않는 한 필요하지 않습니다. 그러나 그 과정에서 '내가 썼다'는 의미의 '당신'은 추상적이다. 당신을 포함한 그 누구도 의미있게 사용할 수 없기 때문이다. 프로세스는 단독으로 존재하지 않으며 운영 체제에서 관리하는 엔터티이며 다른 엔터티, 액세스 파일, 하드웨어 장치 등과 상호 작용해야 합니다. 파일 설명자는 이를 수행하는 기본 수단입니다.
왜 그냥 stdin이나 stdout에 쓰고 싶다고 말할 수 없나요?
분명히 상황에 따라 그럴 수 있습니다. C에서 이는 해당 하위 수준 설명자를 반환하는 (표면적으로는) 매크로입니다( stdio.h
... 참조). WRT 쉘이 귀찮다면 언제든지 다음과 같이 할 수 있습니다.
export stdin=0
export stdout=1
이것이 가능성이 가장 높지만이건 좋은 생각이 아니야, 잠재적으로 불행한 방식으로 전역 네임스페이스에서 공격을 받을 위험이 있기 때문입니다. 그리고 stdin
입력시간 도 0
;)보다 길어요.