본문 바로가기
Language/C언어

C054_open 함수 사용하기

by OdOp 관리자 2024. 1. 12.
SMALL

시작에 앞서서 파일 디스크립터에 대해 알아야 할 필요가 있습니다. 

 

파일 디스크립터

유닉스 시스템에서 사용되는 개념입니다. 프로세스가 파일들을 접근할 때에 번호가 필요한데 이를 파일 디스크립터라 부릅니다. 

기본적으로 할당되는 파일 디스크립터가 총 3가지 있습니다. 

0 : 표준 입력(Standard Input)
1 : 표준 출력(Standard Output)
2 : 표준 에러(Standard Error)

 

open함수는 파일 디스크립터를 만드는 함수라고 생각하면 좋을 것 같습니다. 

 

open

#include <fcntl.h>

int	open(const char *FILENAME, int FLAGS, mode_t MODE);

 

FILENAME은 접근하고자 하는 파일 이름입니다.

FLAGS는 어떠한 목적으로 접근할지를 선택하게 해 줍니다. 

MODE는 특정 경우에만 해당이 되어 아래에서 살펴보도록 하겠습니다. 

마지막으로 반환값입니다. 성공 시 파일디스크립터를 반환해 주고 실패 시 -1을 반환합니다. 

 

파일을 열 때에 어떠한 목적이 있을까요??

읽기, 쓰기, 혹은 둘 다,... 다양한 목적이 있을 것입니다. 그것을 저희는 FLAGS의 인자값으로 넣어야 합니다. 

FLAGS

O_RDONLY : 읽기 목적으로 열기
O_WRONLY : 쓰기 목적으로 열기
O_RDWR : 읽기와 쓰기가 모두 가능한 목적으로 열기
O_CREAT : FILENAME이 존재하지 않으면 생성(MODE도 설정해야 함)
O_EXCL : O_CREAT로 생성된 FILENAME이 아니면 생성하지 않음
O_TRUNC : 기존의 FILENAME 내용을 모두 삭제
O_APPEND : FILENAME에 적힌 내용 후부터 쓰기

 

이것 외에도 O_NOCITTY, O_NONBLOCK, O_SYNC 등 다양한 옵션이 있습니다. 나중에 궁금하시면 찾아보셔도 좋을 것 같습니다. 

 

O_CREAT시 MODE 인자값을 입력해야 합니다. 생성된 파일의 권한을 설정해 주어야 하기 때문입니다. 

파일의 권한에 대한 설정을 아직은 잘 모르시는 분들은 아래의 링크를 참고해 주시길 바라겠습니다. 

https://hig0617.tistory.com/34

 

chmod사용법, 리눅스 파일 권한 수정하기

파일 권한을 수정하기 위해서는 파일 권한을 보는 방법 먼저 알아야 합니다. $ ls -l 리눅스에서 파일 또는 디렉터리에 지정된 권한을 확인해 주는 명령어입니다. 참고로 여기서 숨긴 항목까지 보

hig0617.tistory.com

 

간단한 예를 들어보도록 하겠습니다. 

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>

int main(void)
{
    int fd;

    fd = open("./newfile", O_CREAT | O_TRUNC | O_WRONLY, 0777);
    if (fd < 0)
        return (0);
    write(fd, "Hello, world!\n", 14);
    return (0);
}

 

위와 같은 코드를 실행되면 "Hello, world!\n"가 newfile에 적히게 됩니다. 

LIST

'Language > C언어' 카테고리의 다른 글

C056_C언어에 환경 변수 사용하기  (1) 2024.01.14
C055_pipe 함수 사용하기  (1) 2024.01.13
C053_dup2 함수 사용하기  (0) 2024.01.11
C052_dup 함수 사용하기  (0) 2024.01.10
C051_waitpid 함수 사용하기  (1) 2024.01.09