나는 이것을 읽었다우편 엽서.
파일 설명자는 파일 핸들과 동일합니까?
Linux 커널을 구성하려고 하면 open by fhandle syscalls (FHANDLE) [Y/n/?]
.
이 옵션이 제공되는 이유는 무엇입니까? 커널의 성능이나 컴파일 시간에 영향을 미칠까요, 아니면 단지 파일 액세스에 대한 통합된 방법을 갖기 위한 것일까요?
답변1
ㅏ문서C의 구조체는 종종 이라고 불리며 file handle
, 이는 구조체에 대한 약간의 추상화입니다.파일 설명자:
FILE 데이터 유형은 파일 또는 지정된 데이터 스트림에 대한 정보를 포함하는 구조입니다. 여기에는 파일 설명자, 현재 위치, 상태 플래그 등과 같은 정보가 포함됩니다. 파일 I/O 함수는 주로 구조 자체가 아닌 포인터를 인수로 사용하기 때문에 파일 유형에 대한 포인터로 가장 일반적으로 사용됩니다.
편리한 커널 빌드 환경이 없지만 옵션을 설명하는 도움말 텍스트가 있어야 하며 빠른 검색을 기반으로 다음과 같은 내용이 표시되어야 합니다.
CONFIG_FHANDLE- fhandle 시스템 호출을 통해 열기 -
여기서 Y라고 말하면 사용자 수준 프로그램은 파일 이름을 핸들에 매핑한 다음 해당 핸들을 다른 파일 시스템 작업에 사용할 수 있습니다. 이는 이제 이름 대신 핸들을 사용하여 파일을 추적하는 사용자 공간 파일 서버를 구현하는 데 유용합니다. 파일 이름을 바꾸더라도 핸들은 동일하게 유지됩니다. open_by_handle_at(2) 및 name_to_handle_at(2) 시스템 호출을 활성화합니다.
기본적으로 새로운/추가 시스템 호출에 대한 지원을 추가합니다.
답변2
몇 가지 정보를 볼 수 있습니다.여기.
일반적으로 말하면,파일 설명자열려 있는 모든 파일의 세부 정보를 포함하는 커널 상주 데이터 구조의 항목에 대한 인덱스입니다. POSIX에서는 이 데이터 구조를 다음과 같이 부릅니다.파일 설명자테이블에는 각 프로세스마다 고유한 속성이 있습니다.파일 설명자테이블. 사용자 애플리케이션은 시스템 호출을 통해 추상 키를 커널에 전달하고, 커널은 이 키를 기반으로 애플리케이션을 대신하여 파일에 액세스합니다. 애플리케이션 자체는 파일 설명자 테이블을 직접 읽거나 쓸 수 없습니다.
Unix 계열 시스템에서 파일 설명자는 파일, 디렉터리, 블록 또는 문자 장치("특수 파일"이라고도 함), 소켓, FIFO(이름이 지정된 파이프라고도 함) 또는 이름이 없는 파이프를 참조할 수 있습니다.
C 표준 I/O 라이브러리 루틴의 FILE* 파일 핸들은 기술적으로 이러한 라이브러리 루틴에 의해 관리되는 데이터 구조에 대한 포인터입니다. 이러한 구조 중 하나는 일반적으로 Unix 계열 시스템 기호에서 문제의 개체에 대한 실제 하위 수준 파일 설명을 포함합니다.파일 핸들은 이 추가 레이어를 참조하므로 파일 설명자와 상호 교환할 수 없습니다.