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 |