Linux 파일 설명자

2903 단어 웹 개발
Linux 유 니 버 설 I / O 모델 에서 I/O 작업 시리즈 함수 (시스템 호출) 는 모두 파일 설명자 라 는 정 수 를 중심 으로 전개 된다.이 정수 가 무엇 을 의미 하 는 지 의문 이다.하나의 수치 가 파일 을 대표 합 니까?아무 거나 정 수 를 보 내 서 호출 해도 될까요?
이상 의 질문 을 풀 려 면 파일 설명자 (File Descriptor) 를 더 깊이 공부 해 야 합 니 다.
도해
구체 적 인 상황 을 이해 하려 면 커 널 이 유지 하 는 3 개의 데이터 구 조 를 알 아야 한다.
  • 프로 세 스 급 파일 설명 부표 (파일 설명자 테이블)
  • 시스템 급 파일 시트 열기 (open file table)
  • 파일 시스템 i - node 표 (i - node table)
  • 이 세 개의 데이터 구조 간 의 관 계 는 다음 그림 과 같다.
    fd-inode-diagram.png
    파일 설명 부표
    커 널 은 모든 프로 세 스 에 파일 설명 자 표를 유지 합 니 다. 이 표 의 모든 항목 은 하나의 파일 설명자 에 관 한 정 보 를 기록 합 니 다. 예 를 들 어:
  • 제어 표지 (flags), 현재 커 널 은 하나만 정의 되 었 습 니 다. 즉 close-on-exec
  • 파일 설명 체 포인터 열기
  • 파일 시트 열기
    커 널 은 열 린 모든 파일 에 대해 시스템 단계 의 파일 설명 표 (open file description table) 를 유지 하고 파일 시트 를 여 는 것 으로 약칭 합 니 다.표 의 항목 은 파일 설명 체 열기 (open file description) 라 고 하 며 파일 열기 와 관련 된 모든 정 보 를 저장 합 니 다.
  • 파일 오프셋 (file offset), 호출 read()write() 업데이트, 호출 lseek() 직접 수정
  • 접근 모드 는 open() 에서 설정 을 호출 합 니 다. 예 를 들 어 읽 기 전용, 쓰기 전용 또는 읽 기 전용 등
  • i-node 대상 포인터
  • i - node 표
    각 파일 시스템 은 그 위 에 저 장 된 모든 파일 (디 렉 터 리 포함) 을 위해 하나의 i-node 표를 유지 하고 하나의 i-node 은 다음 과 같은 정 보 를 포함 합 니 다.
  • 파일 형식 (file type) 은 일반적인 파일, 디 렉 터 리, 소켓 또는 FIFO
  • 일 수 있 습 니 다.
  • 접근 권한
  • 파일 잠 금 목록 (파일 잠 금)
  • 파일 크기
  • 등등
  • i-node 디스크 장치 에 저장 되 어 있 고 커 널 은 메모리 에 복사 본 을 유지 하고 있 습 니 다. 여기 i-node 표 는 후자 입 니 다.복사 본 은 기 존 정 보 를 제외 하고 참조 계수 (파일 설명 체 열기), 소재 장치 번호 와 임시 속성, 예 를 들 어 파일 잠 금 등 도 포함한다.
    장면 해석
    위의 그림 에서 두 프로 세 스 의 많은 파일 설명자 와 상호 관 계 를 상세 하 게 묘사 했다.
    파일 설명자 복사
    프로 세 스 A 에서 파일 설명자 1 과 파일 설명자 20 은 같은 파일 설명 체 (레이 블 23) 를 가리 키 고 있 습 니 다.이것 은 호출 dup() 시리즈 함 수 를 통 해 형 성 된 것 일 가능성 이 높다.
    파일 설명자 복 사 는 어떤 장면 에서 매우 유용 합 니 다. 예 를 들 어 표준 입력 / 출력 방향 을 바 꿉 니 다.shell 에서 이 조작 을 완성 하 는 것 은 매우 간단 하고 대부분 사람들 이 할 수 있 지만 뒤의 원 리 를 생각 한 사람 은 극히 적다.
    필요 한 몇 가지 절 차 를 대충 설명 하고 표준 출력 (파일 설명자 1) 을 예 로 들 면:
  • 대상 파일 을 열 고 파일 설명자 n 을 되 돌려 줍 니 다.
  • 파일 설명자 1 닫 기;
  • 호출 dup 파일 설명자 n 을 1 로 복사 합 니 다.
  • 파일 설명자 n 닫 기;

  • 하위 프로 세 스 계승 파일 설명자
    프로 세 스 A 의 파일 설명자 2 와 프로 세 스 B 의 파일 설명자 2 는 같은 파일 설명 체 (레이 블 73) 를 가리 키 고 있 습 니 다.이런 상황 은 호출 fork() 파 출산 과정 이후 에 발생 할 가능성 이 크다. 예 를 들 어 A 호출 fork() 파생 B 이다.이 때 B 는 하위 프로 세 스 로 서 부모 프로 세 스 A 에서 파일 설명 자 표를 계승 하 였 으 며, 그림 에 표 시 된 파일 설명 자 2 를 포함 하 였 다.이것 이 바로 이 말의 유래 다.
    물론 프로 세 스 AUnix 소켓 을 통 해 파일 설명 자 를 B 에 전달 하 는 것 도 비슷 하지만 일반 파일 설명자 수 치 는 다르다.동시에 2 를 위해 서 는 아주 공교롭게도 발생 한다.
    작성 자: fasionchan 링크:https://www.jianshu.com/p/430340c4a37a

    좋은 웹페이지 즐겨찾기