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