Love Every Moment

〔Linux/Unix〕파일 디스크립터(File Descriptor)란? 본문

PROGRAMMING::CORE/Operating System

〔Linux/Unix〕파일 디스크립터(File Descriptor)란?

해 송 2021. 5. 27. 20:25
반응형

 

 

1. 파일 디스크립터

 

리눅스 운영 체계에서 파일에 대한 정보를 기술하고 유지하는 기억 장치의 영역

  • 리눅스는 물리적 장치들을 일종의 파일로 관리
  • 특히 리눅스 쉘은 작업에 필요한 파일들을 일종의 번호를 붙여서 관리

 

파일 디스크립터 FD 대신 사용하는 이름 목적
0 stdin 표준 입력
1 stdout 표준 출력
2  stderr 표준 에러

 


 

2. 최대 파일 디스크립터

 

 

터미널에 ulimit -a 명령어를 치면 한번에 열 수 있는 최대한의 파일 개수를 알 수 있다.

현재 사용 중인 맥os 에서는 파일 디스크립터 256 까지 열 수 있다.

 


 

3. 파일 디스크립터가 부여되는 방식

 

파일 디스크립터는 표준 입력, 표준 출력, 표준 에러인 0 부터 2까지를 제외하면

open() 함수로 파일을 열어서 3 부터 번호를 부여하게 된다.

 

(1) HEADER FILE

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

 

(2) SYNTAX

int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);

 

(3) PARAMETER

#1. PATHNAME: The name of the file. Can be Relative Path or Absolute Path.

#2. FLAGS: Opening options to the file

#3. MODE: The access rights to the file

 

(4) RETURN VALUE

Unsigned int value of the file descriptor. -1 if it fails.

 

(5) DESCRIPTION

  • 기본 MODE 

(1)  O_RDONLY: 읽기 전용

(2) O_WRONLY: 쓰기 전용

(3) O_RDWR: 읽기와 쓰기 모두 가능

 

  • 기타 MODE

(1) O_CREAT: 파일이 존재하지 않을 경우 파일을 생성

- 파일의 접근 권한을 지정해주어야 한다

open("example", O_WRONLY | O_CREAT, 0644);

 

(2) O_EXCL: O_CREAT 을 이용하여 파일을 오픈했는데 이미 파일이 존재하는 경우 에러를 반환

open( "example", O_WRONLY | O_CREAT | O_EXCL, 0644);

- "example" 이라는 파일이 없었을 경우에는 정상적으로 쓰기 전용 파일이 생성된다.

- 해당 파일이 이미 존재하는 경우에는 open() 에 실패하고 에러를 반환한다.

 

(3) O_TRUNC: 기존의 파일 내용을 모두 삭제

(4) O_APPEND: 기존 파일 내용에 추가하여 쓸 수 있도록 open() 후에 쓰기 포인터가 파일의 끝에 위치

 

 

C 라이브러리 함수 - open 파일 열기

 

forum.falinux.com

 


 

 

4. 파일 디스크립터 이용하여 읽기

 

read() 함수를 이용하여 해당 파일을 읽을 수 있다.

 

(1) HEADER FILE

#include <unistd.h>

 

(2) SYNTAX

ssize_t read (int fd, void *buf, size_t nbytes)

 

(3) PARAMETERS

#1. fd: File Descriptor

#2. buf: The buffer to save the data

#3. nbytes: Buffer size

 

(4) RETURN VALUE

The number of bytes that are already read. -1 if it fails.

 

(5) DESCRIPTION

Reads the file which was opened by function open().

  • 인자로 받은 nbytes 의 수만큼 fd 를 읽어 buf 에 저장하는 함수다.
  • 읽어온 바이트 수를 반환하며, 실패시 -1을 반환한다.
  • 파일을 끝까지 읽었다면, 다음 번에는 더 이상 읽을 바이트가 없기 때문에 0을 반환한다.

 

컴퓨터 코딩 프로그래밍 교육

반응형
Comments