open()

-파일을 열거나 파일이 없으면 새로운 파일을 생성한다

 

함수원형

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flages, [mode_t mode]);

 

매개변수(parameter)

- const char *pathname : 파일의 경로

- int flags

   
O_RDONLY 읽기 전용
O_WRONLY 쓰기 전용
O_RDWR 읽고 쓰기 모두 가능
   

- mode : 파일 access 권한 설정

 

반환값

0 이상 정상적으로 파일이 열리면 파일디스크립터 값 반환
-1 오류 발생, 상세 오류 내용 -> errno

close()

-열린 파일 닫아줌

-fd해제, 파일에서 프로세스 분리

 

함수원형

#include <unistd.h>

int close(int fd);

 

매개변수(parameter)

- int fd : 닫을 파일을 파일디스트립터 값

 

반환값

- 성공 시 0, 실패 시 -1 리턴 후 errno 설정

 


read()

-open() 으로 열기한 파일을 읽는다

 

함수원형

#include <unistd.h>

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

매개변수(parameter)

- int fd : 읽을 파일의 파일 디스크립터

- void *buf : 읽은 데이터를 저장할 버퍼, 파일을 읽을 버퍼

- size_t nbytes : 읽을 데이터의 최대 길이, 버퍼의 크기 (buf의 길이보다 작거나 같다)

 

반환값

-정상 : 읽어들인 데이터의 크기, 바이트 수, 중간에 파일의 끝을 만나면 거기까지의 크기를 리턴하므로 nbytes가 무조건 리턴되는 것은 아님

- 실패 : -1

 

 

 

char buf[BUFFER_SIZE]; 

int fd = open("testfile.txt", O_RDONLY); 
ssize_t nbyte = read(fd, buf, BUFFER_SIZE);

gcc 옵션으로 BUFFER_SIZE 적용할 수 있음 (ex: -D BUFFER_SIZE=99)  

 


lseek()

- 파일의 위치 / 커서(seek pointer)를 이동시키는 함수

- 특정 위치에서 파일의 read/write 시 seek pointer 사용

 

함수원형

#include <unistd.h>
#include <sys/types.h>

off_t lseek(int fd, off_t offset, int whence);
off_t lseek(int fildes, off_t offset, int whence);

매개변수(parameter)

- int fd : 파일 디스크립터

- off_t offset : 파일의 시작위치(기준점)에서 이동할 거리

- int whence : 기준점

인수  
SEEK_SET the offset is set to offset bytes.
SEEK_CUR the offset is set to its current location plus offset bytes
SEEK_END the offset is set to the size of the file plus offset bytes
SEEK_HOLE the offset is set to the start of the next hole greater than or equal to the supplied offset.  The definition of a hole is provided
           below.
SEEK_DATA the offset is set to the start of the next non-hole file region greater than or equal to the supplied offset.

 

반환값

- 성공 시 위치한 seek pointer,  실패 시 -1 리턴 후 errno 설정

'1 > C' 카테고리의 다른 글

[C] 구조체 struct 정리  (0) 2022.01.18
가변 인수  (0) 2021.10.10
strdup substr memmove strlcpy strlcat  (0) 2021.07.03
parameter / argument  (0) 2021.06.19
size_t / ssize_t  (0) 2021.06.10

+ Recent posts