file descriptor 예제

2019年8月3日

프로세스는 필요에 따라 추가 FD를 열 수 있습니다(운영 체제가 부과하는 제한까지). 대부분의 언어에서 새 파일을 열 때 운영 체제에서 선택하는 FD 번호가 다시 제공됩니다(또는 라이브러리에서 FD 번호를 관리하고 세부 정보를 숨깁니다). 그러나 셸 스크립트에서는 패러다임이 다릅니다: 먼저 FD 번호를 선택한 다음 해당 FD를 사용하여 파일을 엽니다. 즉, 스크립트 작성기는 각 작업에 대해 사용 중인 FD를 추적해야 합니다. (bash의 최신 버전에서는 bash가 실제로 파일 설명자를 선택하고 원하는 변수에 저장할 수 있습니다. 그러나 지금은 건너 뛸 것입니다.) fcntl() 함수는 전달된 명령 인수에 따라 파일 설명자에서 다양한 작업을 수행하는 데 사용됩니다. F_GETFD, F_SETFD, F_GETFL 및 F_SETFL을 포함하여 파일 설명자와 관련된 속성을 얻고 설정하는 명령이 있습니다. 최하위 수준에서 시작하려면 프로그래머가 하드웨어 장치와 통신할 수 있도록 장치 드라이버를 만들어야 합니다. 이 장치 드라이버는 예제 1.2, “포함/linux/virtio.h의 추상화”와 같이 커널에서 제공하는 API에 기록됩니다. 장치 드라이버는 다양한 요구 사항에 대한 응답으로 커널에서 호출되는 다양한 기능을 제공합니다. 위의 간단한 예제에서는 드라이버가 파일 설명자의 유사한 작업에 대한 응답으로 호출되는 읽기 및 쓰기 함수를 제공하는 것을 볼 수 있습니다. 장치 드라이버는 이러한 일반 요청을 특정 장치에 대한 특정 요청 또는 명령으로 변환하는 방법을 알고 있습니다.

유닉스와 같은 시스템에서 파일 설명자(개방형 파일)는 다음과 같이 참조할 수 있습니다. 해당 항목의 위치와 함께. Bash 가이드와 Bash FAQ 55는 소개 설명을 제공하므로 간결하게 유지하겠습니다. 에코 예제에서는 에코가 일반적으로 stdout(FD 1)에 기록되므로 FD 1이 가리키는 위치를 가리키도록 FD 1을 재정의합니다. 따라서, 에코는 우리의 stderr (FD 2)에 쓰기로 속아 것입니다.

カテゴリー:未分類