42 Seoul

[42Seoul] open, read, write 구현

jaewpark 2021. 4. 19. 19:00

OPEN(2)

#include <fcntl.h>

 

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

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

 

: open()함수는 int 형 정수를 반환하며, 음수의 숫자가 반환될 경우에는 파일 열기에 실패한 것이다.

파일을 성공적으로 열었다면 FD(file descriptor) 반환한다.

pathname은 파일의 이름

flag는 O_RDONLY(읽기전용), O_WRONLY(쓰기전용), O_RDWR(읽기쓰기)를 사용 하며, 자주 쓰이는 것들에는 O_CREAT, O_EXCL, O_TRUNC, O_APPEND, O_NONBLOCK, O_NDELAY 등이 있다.

mode는 S_IRWXU(소유자에게 읽,쓰,실 권한 부여), S_IRUSR(소유자에게 읽기 권한 부여), S_IRGRP(그룹에게 읽기 권한 부여) 등이 있다. 생략이 가능하며, 새로운 파일을 만드는 경우에만 사용

 

ex)

더보기

int fd;

fd = open("example.txt", O_RDONLY, S_IXUSR | S_IROTH);


READ(2)

#include <unistd.h>

 

ssize_t read(int fd, void *buf, size_t count);

: read()함수는 파일의 끝을 만나면 0 반환, 정상적으로 파일에 대한 내용을 읽어온다면 읽은 바이트 수를 반환, 실패하면 -1 반환

fd가 나타내는 파일에서 데이터를 읽음

buf는 읽은 데이터를 저장할 메모리의 시작 주소

len은 읽을 데이터의 바이트 수

 

ex)

더보기

int fd;

char buff[100];

 

fd = open("./test", O_RDONLY);

if (fd == -1)

    printf("File Open Error\n");

read(fd, buf, sizeof(buf));

printf("%s\n", buf);

close(fd);

 


write(2)

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count)

: 성공적으로 처리된 데이터 갯수, 실패시 -1 반환

buf 버퍼에 쓸 내용

count 쓸 데이터의 길이 


close()

#include <unistd.h>

int close(int fd)

: open()함수로 열기를 한 파일을 사용을 중지

정상적으로 close 했다면 0을 반환, 실패했으면 -1을 반환