Linux 파일 설명자
2903 단어 웹 개발
I/O
작업 시리즈 함수 (시스템 호출) 는 모두 파일 설명자 라 는 정 수 를 중심 으로 전개 된다.이 정수 가 무엇 을 의미 하 는 지 의문 이다.하나의 수치 가 파일 을 대표 합 니까?아무 거나 정 수 를 보 내 서 호출 해도 될까요?이상 의 질문 을 풀 려 면 파일 설명자 (File Descriptor) 를 더 깊이 공부 해 야 합 니 다.
도해
구체 적 인 상황 을 이해 하려 면 커 널 이 유지 하 는 3 개의 데이터 구 조 를 알 아야 한다.
fd-inode-diagram.png
파일 설명 부표
커 널 은 모든 프로 세 스 에 파일 설명 자 표를 유지 합 니 다. 이 표 의 모든 항목 은 하나의 파일 설명자 에 관 한 정 보 를 기록 합 니 다. 예 를 들 어:
close-on-exec
커 널 은 열 린 모든 파일 에 대해 시스템 단계 의 파일 설명 표 (open file description table) 를 유지 하고 파일 시트 를 여 는 것 으로 약칭 합 니 다.표 의 항목 은 파일 설명 체 열기 (open file description) 라 고 하 며 파일 열기 와 관련 된 모든 정 보 를 저장 합 니 다.
read()
과 write()
업데이트, 호출 lseek()
직접 수정 open()
에서 설정 을 호출 합 니 다. 예 를 들 어 읽 기 전용, 쓰기 전용 또는 읽 기 전용 등 i-node
대상 포인터 각 파일 시스템 은 그 위 에 저 장 된 모든 파일 (디 렉 터 리 포함) 을 위해 하나의
i-node
표를 유지 하고 하나의 i-node
은 다음 과 같은 정 보 를 포함 합 니 다.FIFO
i-node
디스크 장치 에 저장 되 어 있 고 커 널 은 메모리 에 복사 본 을 유지 하고 있 습 니 다. 여기 i-node
표 는 후자 입 니 다.복사 본 은 기 존 정 보 를 제외 하고 참조 계수 (파일 설명 체 열기), 소재 장치 번호 와 임시 속성, 예 를 들 어 파일 잠 금 등 도 포함한다.장면 해석
위의 그림 에서 두 프로 세 스 의 많은 파일 설명자 와 상호 관 계 를 상세 하 게 묘사 했다.
파일 설명자 복사
프로 세 스
A
에서 파일 설명자 1 과 파일 설명자 20 은 같은 파일 설명 체 (레이 블 23) 를 가리 키 고 있 습 니 다.이것 은 호출 dup()
시리즈 함 수 를 통 해 형 성 된 것 일 가능성 이 높다.파일 설명자 복 사 는 어떤 장면 에서 매우 유용 합 니 다. 예 를 들 어 표준 입력 / 출력 방향 을 바 꿉 니 다.
shell
에서 이 조작 을 완성 하 는 것 은 매우 간단 하고 대부분 사람들 이 할 수 있 지만 뒤의 원 리 를 생각 한 사람 은 극히 적다.필요 한 몇 가지 절 차 를 대충 설명 하고 표준 출력 (파일 설명자 1) 을 예 로 들 면:
dup
파일 설명자 n 을 1 로 복사 합 니 다.하위 프로 세 스 계승 파일 설명자
프로 세 스
A
의 파일 설명자 2 와 프로 세 스 B
의 파일 설명자 2 는 같은 파일 설명 체 (레이 블 73) 를 가리 키 고 있 습 니 다.이런 상황 은 호출 fork()
파 출산 과정 이후 에 발생 할 가능성 이 크다. 예 를 들 어 A
호출 fork()
파생 B
이다.이 때 B
는 하위 프로 세 스 로 서 부모 프로 세 스 A
에서 파일 설명 자 표를 계승 하 였 으 며, 그림 에 표 시 된 파일 설명 자 2 를 포함 하 였 다.이것 이 바로
이 말의 유래 다.물론 프로 세 스
A
가 Unix
소켓 을 통 해 파일 설명 자 를 B
에 전달 하 는 것 도 비슷 하지만 일반 파일 설명자 수 치 는 다르다.동시에 2 를 위해 서 는 아주 공교롭게도 발생 한다.작성 자: fasionchan 링크:https://www.jianshu.com/p/430340c4a37a
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Emacs에서 디폴트보다는 편하게 JSP를 쓰고 싶다.Emacs에서 JSP(JavaServer Pages)를 쓰게 되었지만 코드 성형 설정이 없었다. CentOS 6 GNU Emacs 23.1.1 STEP 1 의 다운로드에서 파일을 다운로드합니다. (나는 Github에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.