C에서 파일 설명자를 반환하는 방법

C에서 파일 설명자를 반환하는 방법

나는 이것에 대해 혼란스러워합니다.

fp=fopen(파일명,모드);

fopen()이 반환한 값은 무엇입니까?FP. 값이 파일 설명자 정수입니까?

fp를 스트림이라고 하나요? 그렇지 않은 경우 스트림을 반환하는 방법은 무엇입니까? 스트림은 언제 생성됩니까?

c를 사용하여 열린 파일의 파일 설명자를 반환하는 방법은 무엇입니까?

FILE 구조를 inode 테이블이라고 합니까?

답변1

fopen데이터 구조를 반환하는 라이브러리 함수입니다 FILE. (간체) 이 구조에 대한 자세한 내용은 다음에서 찾을 수 있습니다.이 페이지.

이 구조의 구성원 중 하나는 char으로 표시 fd됩니다.파일 설명자. 프로세스가 open시스템 호출(실제로 수행함 fopen)을 사용하여 파일을 열 때마다 다음과 같은 내부 커널 테이블에 항목이 생성됩니다. (전역) 파일 테이블.

그런 다음 다른 프로세스별 테이블에 다른 항목을 만듭니다.사용자 파일 설명자 테이블. 이 항목은 이전 항목(커널 내)을 가리킵니다.파일 테이블), 테이블의 다른 항목과 마찬가지로 색인 번호가 있습니다. 인덱스는 프로세스를 인식합니다.파일 설명자.

  • 파일 설명자 0은 표준 입력용으로 예약되어 있습니다.
  • 파일 설명자 1은 표준 출력용으로 예약되어 있습니다.
  • 파일 설명자 2는 표준 오류 출력용으로 예약되어 있습니다.

따라서 open프로그램에서 처음으로 호출하면 파일 설명자 3을 얻을 가능성이 높습니다. 그러면 4, 5 등이 될 것입니다 ...

그런 다음 이 파일 설명자를 파일에 대해 수행하려는 모든 작업(시스템 호출)에 대한 핸들로 사용할 수 있습니다: read, write및 (릴리스 파일 설명자) 자세한 내용은 이러한 시스템 호출의 매뉴얼 페이지를 참조할 수 있습니다. 라이브러리 함수에서 사용하는 시스템 호출을 매뉴얼에서 찾는 것도 일반적입니다. 예를 들어 다음과 같은 내용이 표시됩니다.lseekcloseman fopen

SEE ALSO
    open(2) ...

이제 이러한 개념은개울그리고인덱스 노드조금 다릅니다. 첫 번째는 C에서 순전히 개념적입니다. 데이터 흐름은 시스템 호출을 사용하여 생성하는 것입니다 read. write반면에 inode 번호는 파일 액세스보다는 저장소 관리와 더 관련이 있습니다. 파일 시스템에서 각 파일은 파일 시스템의 수퍼 블록에 저장된 데이터 구조와 연결됩니다. 이 데이터 구조(inode라고 함)에는 다음과 같은 파일에 대한 여러 가지 메타 정보가 들어 있습니다.

  • 면접 시간
  • 권한(모드)
  • 소유권
  • 유형(일반, 디렉토리, 문자, 블록, 파이프...)
  • 파일에 대한 링크(경로) 수
  • 파일 크기

또한 inode를 사용하면 커널이 디스크에서 파일 조각의 위치를 ​​찾을 수 있습니다. 이에 대한 자세한 내용을 보려면 다음을 읽어 보는 것이 좋습니다.UNIX 운영 체제에서 설계저자: Maurice J.Bach(4장, 섹션 1, "인덱스 노드"). 당신은 또한 이것에 관심이 있을 수 있습니다이것.

관련 정보