OS의 역할

  • 프로세스
  • 메모리 할당
  • 파일 내용
  • 파일 이름, 디렉토리
  • 엑세스 컨트롤(보안)
  • 기타 (유저, IPC, 네트워크, 타임, 터미널)

파일 디스크립터 (FD)

OS가 파일이나 기타 입/출력 리소스에 액세스하는데 사용되는 인덱스 번호.

0 : 표준 입력
1 : 표준 출력
2 : 표준 에러

파일 오픈시 부여되는 FD는 3부터 시작.

시스템 콜 open은 FD값을 반환

open() ,close() read() , write()

단순히 함수가 아닌 여러가지 일이 생깁니다.

  1. User 레지스터와 PC를 메모리에 저장
  2. CPU의 수퍼바이저 모드로 전환
  3. 메모리 관리를 커널 페이지 테이블로 변경
  4. 스택을 커널 스택으로 변경
  5. 커널 C코드로 점프
  • pathname : 파일의 경로를 지정하는 문자열

    • 보안과 안정성 측면에서 const 지정
  • flags

  • mode 파일의 접근 권한을 받는다

성공하면 0을 반환하고 실패하면 -1을 반환합니다.

오픈하지 않은 파일에 대해서는 FD가 존재하지 않습니다. 오픈 하든 오픈하지 않든 파일을 구분하기 위해 id를 사용하고 FD는 오픈한 파일들을 구분하기 위해 사용합니다.

write() 함수는 파일 디스크립터를 이용하여 파일에 데이터를 쓰는 시스템 콜입니다

  • fd: 데이터를 쓸 파일 디스크립터입니다.
  • buf: 파일에 쓸 데이터가 저장된 버퍼의 포인터입니다.
  • count: 쓸 데이터의 크기입니다.

write() 함수는 파일에 데이터를 쓰는데 성공하면 쓰여진 데이터의 크기를 반환하고, 실패하면 -1을 반환합니다. 반환값의 자료형은 ssize_t입니다.

ssize_t는 부호 있는 정수형으로, 시스템에서 제공하는 데이터 타입입니다. ssize_t는 size_t와 비슷하지만, size_t가 부호 없는 정수형이고 ssize_t는 부호 있는 정수형이라는 점이 다릅니다. ssize_t는 시스템에 따라 크기가 다를 수 있습니다.

read() 함수는 파일에서 데이터를 읽는데 성공하면 읽은 데이터의 크기를 반환하고, 실패하면 -1을 반환합니다.

read() 함수도 write() 함수와 마찬가지로 ssize_t 자료형을 사용합니다. read() 함수는 파일에서 읽은 데이터를 buf 포인터가 가리키는 버퍼에 저장합니다. read() 함수는 파일의 끝에 도달하면 0을 반환합니다.

0개의 댓글