C언어

open

파일 경로와 flag, mode를 입력으로 넣어주면 file descriptor를 전달하여 준다. fcntl.h 헤더에 포함되어 있다.

#include <fcntl.h>

int open (const char *name, int flags)
int open (const char *name, int flags, mode_t mode)
  • open

    • 인자

      • const char* name : 파일의 절대 경로 혹은 상대 경로이거나 파일 이름이다.

      • int flags : 반드시 O_RDONLY , O_WRONLY, O_RDWR 값들 중 하나이어야 한다. 각각 "읽기 전용", "쓰기 전용", "읽기 쓰기"를 나타낸다. 몇 가지 다른 값들과 or 연산을 통하여 같이 사용할 수 있다.

      • mode_t mode : flags에 O_CREAT가 포함되어있는 경우 새로 만들어지는 파일의 권한을 설정한다.

flags

위에서 언급하였듯이 O_RDONLY , O_WRONLY, O_RDWR 값 중 하나이어야 하고 각각 "읽기 전용", "쓰기 전용", "읽기 쓰기"를 나타낸다. OR 연산을 통해서 다른 값들과 같이 사용할 수 있다. 예를 들어 쓰기 전용으로 열고, name으로 주어진 경로 혹은 이름의 파일이 존재하지 않을 때는 그 파일을 생성하고 싶을 때 O_WRONLY | O_CREAT를 사용하여 주면 된다. 아래는 같이 사용할 수 있는 flag의 예제이다.

  • O_CREAT : 파일이 존재하지 않는 경우 새로 파일을 생성한다.

  • O_EXCL : O_CREAT를 사용하였는데 이미 파일이 존재하는 않은 경우 open이 fail 한다.

  • O_APPEND : write 할 때 파일의 맨 뒤에서 수행한다.

  • O_TRUNC : O_WRONLY, O_RDWR과 같이 쓰였을 때 파일이 이미 존재하는 경우 내용을 전부 지우고 새로 쓴다.

mode

O_CREAT로 생성되는 파일의 권한을 설정한다. 0600처럼 8진수 값을 넣어도 되고, 혹은 S_IRWXU (0700) 와 S_IRUSR (0400)과 같은 정의되어있는 상수를 바로 사용하거나 or로 섞어서 써도 된다. 관련 상수는 open(2)와 관련된 man page에서 O_CREAT 이하의 내용에서 볼 수 있다.

read

  • read

    • 인자

      • int fd : file descriptor이다. open의 반환 값이나 stdin, stdout, stderr 에 해당하는 0, 1, 2를 넣어주면 된다.

      • void* buf : 읽어올 결과물을 받을 버퍼이다.

      • size_t count : 읽어올 결과물의 길이이다.

    • 반환 값

      • read에 성공한 byte의 수이다.

      • EOF 인경우 0이다.

      • read에 실패한 경우 -1을 반환하고 errno를 설정한다.

write

  • write

    • 인자

      • int fd : file descriptor이다. open의 반환 값이나 stdin, stdout, stderr 에 해당하는 0,1,2를 넣어주면 된다.

      • const void* buf : write 할 값이 담긴 buffer이다.

      • size_t count : write할 내용의 길이이다.

    • 반환 값

      • write에 성공한 byte의 수이다.

      • write에 실패한 경우 -1을 반환하고 errno를 설정한다.

Last updated