파일 설명자는 무엇을 참조합니까?

파일 설명자는 무엇을 참조합니까?

내 이해는파일 설명자open()이는 각 커널 프로세스가 ed 파일, 파이프, 소켓 및 기타 개체에 매핑되는 키인 정수 입니다 .

"open file/socket/pipe/..."(파일 설명자에 대한 참조)에는 정확하고 짧고 구체적인 이름이 있습니까?

이를 "파일"이라고 부르면 파일 시스템에 저장된 열리지 않은 파일과 혼동을 일으킬 수 있습니다. 단순히 파일 설명자를 참조하는 것만으로는 의미를 적절하게 설명할 수 없습니다(예: 복사정수프로세스 간에는 쓸모가 없습니다.)

찾다오픈 그룹 기본 사양내 시스템의 맨페이지에서는 파일 설명자의 참조 객체가 다음과 같다는 결론을 내리게 되었습니다.목적특정 열린 파일인 경우파일을 열다. 이것보다 더 구체적인 용어가 있나요?목적?

답변1

더 이상 구체적인 용어는 없습니다. 전통적인 Unix에서는 파일 설명자 참조파일 테이블, 호출되는 항목문서, 또는 때로는파일을 열다. 이는 특정 맥락에 있으므로 분명히 용어는문서문맥상 매우 일반적이다파일 테이블특히 열린 파일을 나타냅니다.

디스크에 있는 파일은 종종인덱스 노드, 기술적으로 inode는 파일의 메타데이터 부분이지만. 그러나 인덱스 노드와 데이터 블록 간의 관계는 일대일이므로 인덱스 노드를 참조하면 암시적으로 해당 노드가 가리키는 데이터를 참조하게 됩니다. 보다 현대적인 파일 시스템은 공유 가능한 데이터 블록의 쓰기 중 복사와 같은 기능을 지원할 수 있으므로 이는 보편적으로 적용 가능하지는 않지만 기존 Unix에서는 작동합니다. 그러나 용어를 고려할 때파일 시스템, 내용을 고려하면 상당한 도약입니다.문서.

inode도 메모리로 읽혀집니다.핵심 인덱스 노드디스크에 있는 파일을 열고 저장할 때인덱스 노드 테이블, 그러나 이것은 귀하가 요청한 것보다 더 높은 수준의 간접적입니다.

이로 인해 디스크의 파일(inode에서 참조)과 열린 파일(파일 테이블의 항목에서 참조)이라는 용어가 충돌하게 됩니다.

"파일 열기" 또는 "파일 테이블 항목" 중 하나가 설명하려는 내용을 설명하기에 충분할 것이라고 제안합니다.

내가 찾은 꽤 깔끔한 참고 자료는 다음과 같습니다.http://www.hicom.net/~shchuang/Unix/unix4.html. 참고문헌(바흐친절)은 이 책에 대한 참고 자료입니다.유닉스 운영체제의 설계저자: 모리스 J. 바흐.

답변2

일곱 번째 버전의 Unix에서 파일 설명자는 사용자 구조의 테이블에 대한 인덱스였으며, 이는 단순히 열린 파일의 [시스템 전역] 테이블에 대한 포인터 배열이었습니다. 따라서 파일 설명자 자체는 실제로간접적인참조, 일종의 "포인터에 대한 포인터"입니다. 또한 단일 바이트 플래그 필드 배열을 인덱싱합니다(적어도 그 당시에는 close-on-exec 플래그만 포함되었습니다).

struct user {
    ...
    struct file *u_ofile[NOFILE]; /* pointers to file structures of open files */
    char u_pofile[NOFILE]; /* per-process flags of open files */
}

열린 파일 테이블 자체에는 열린 파일의 읽기/쓰기 모드, inode에 대한 포인터, 위치 및 최신 시스템의 기타 많은 정보가 포함되어 있습니다. 현대 시스템의 파일 설명자 테이블에 이보다 더 많은 내용이 포함되어 있는지는 모르겠습니다.

바라보다:

관련 정보