tgool
Tgool
tgool
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Science
      • AI
      • Data Mining
      • ML(Machine Learning)
    • Computer Science
      • 자료구조
      • 알고리즘
      • 시스템 프로그래밍
      • 운영체제
      • 컴퓨터 구조
      • 컴퓨터 네트워크
      • 데이터 베이스
      • 파이썬
      • 자바
      • 아두이노
    • Math
      • 통계학
      • 확률론
      • 선형대수학
      • 수리통계학
      • 회귀분석
    • TOFEL
    • Git
    • Plan
    • Book
    • Working out
      • 영양과 생활
      • 운동 정보
      • 운동 기록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
tgool

Tgool

[CSAPP] 10.3 Opening and Closing Files
Computer Science/컴퓨터 구조

[CSAPP] 10.3 Opening and Closing Files

2023. 3. 18. 02:35

10.3 Opening and Closing Files

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(char *filename, int flags, mode_t mode);
	/*Returns: new file descriptor if OK, −1 on error*/
  • 프로세스는 open 함수를 호출하여 기존 파일을 열거나 새 파일을 생성한다.
  • open 함수는 파일 이름을 파일 디스크립터로 변환하고 디스크립터 번호를 반환한다.
  • 반환된 디스크립터는 프로세스에서 현재 열려 있지 않은 가장 작은 디스크립터 번호이다.
  • flags 인자는 프로세스가 파일에 액세스하는 방식을 나타낸다:
    • O_RDONLY. 읽기 전용
    • O_WRONLY. 쓰기 전용
    • O_RDWR. 읽기 및 쓰기
  • 예를 들어, 다음과 같이 존재하는 파일을 읽기 위해 열 수 있다:

fd = Open("foo.txt", O_RDONLY, 0);

  • flags 인자는 추가적인 쓰기 instructions를 제공하는 하나 이상의 비트 마스크와 OR 연산될 수도 있다:
    • O_CREAT. 파일이 존재하지 않으면 빈 버전의 파일을 생성한다.
    • O_TRUNC. 파일이 이미 존재하는 경우 해당 파일을 truncate.
    • O_APPEND. 각 쓰기 작업 전에 파일 위치를 파일 끝으로 설정한다.
  • 예를 들어, 다음과 같이 데이터를 추가하기 위해 존재하는 파일을 열 수 있다:

fd = Open("foo.txt", O_WRONLY|O_APPEND, 0);

  • mode 인자는 새 파일의 액세스 권한 비트를 지정한다. 이러한 비트에 대한 기호적 이름은 Figure 10.2에 있음.
  • 각 프로세스는 umask를 가지고 있으며, umask 함수를 호출하여 이를 설정할 수 있다.
  • 프로세스가 open 함수를 호출하여 일부 mode 인자로 새 파일을 생성하는 경우, 파일의 액세스 권한 비트는 mode & ~umask로 설정된다.
    • 예를 들어, mode 및 umask의 기본값이 다음과 같다고 가정해 보자:
      • #define DEF_MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH
      • #define DEF_UMASK S_IWGRP|S_IWOTH (이 권한은 부여X 하기 위한 것)
      • 그러면 다음 코드 조각은 파일 소유자에게 읽기 및 쓰기 권한이 있고, 다른 모든 사용자에게 읽기 권한이 있는 새 파일을 만든다:
      • umask(DEF_UMASK);
      • fd = Open("foo.txt", O_CREAT|O_TRUNC|O_WRONLY, DEF_MODE);
#include <unistd.h>
int close(int fd);
/*Returns: 0 if OK, −1 on error*/
  • 마지막으로, 프로세스는 close 함수를 호출하여 열린 파일을 닫는다.

 

'Computer Science > 컴퓨터 구조' 카테고리의 다른 글

[CSAPP] 10.2 File(파일)  (1) 2023.03.18
[CSAPP] 10.1 Unix I/O  (1) 2023.03.18
[CSAPP] Chapter 10. System-Level I/O  (0) 2023.03.18
[CSAPP] 9.9 Dynamic Memory Allocation(동적 메모리 할당)  (0) 2023.03.08
[CSAPP] 4.5 Pipelined Y86-64 implementations  (0) 2023.03.01
    'Computer Science/컴퓨터 구조' 카테고리의 다른 글
    • [CSAPP] 10.2 File(파일)
    • [CSAPP] 10.1 Unix I/O
    • [CSAPP] Chapter 10. System-Level I/O
    • [CSAPP] 9.9 Dynamic Memory Allocation(동적 메모리 할당)
    tgool
    tgool

    티스토리툴바