본문 바로가기
CS/Linux

Func (File System & File Input/Output)

by JHyun0302 2023. 8. 29.
728x90

리눅스 파일 종류

- rwxrw-rw- 1 owner own group file size create date file name
파일 종류 권한 하드링크 수 소유자 소유그룹 파일 크기 생성 및 수정 일 파일 이름

 

 

 

함수 설명
open(2) 파일 존재하면 열기
파일 존재하지 않으면 생성해서 열기
creat(2) 파일 존재하면 기존 파일 삭제 후 열기
파일 존재하지 않으면 생성해서 열기
close(2) 파일 닫기
read(2) 열려 있는 파일로부터 데이터 읽기
write(2) 열려 있는 파일로부터 데이터 저장
lseek(2)  읽기/쓰기 포인터를 특정 위치로 이동

 

 

open(2)

int open(const char* path, int flags, /*, mode_t mode */);
  • 1번 파라미터 : 열고자 하는 파일 경로
  • 2번 파라미터 : 파일 열때 옵션

 

flag explain
O_RDONLY 읽기 전용
O_WRONLY 쓰기 전용
O_RDWR 읽기/쓰기 전용
O_CREAT 파일이 존재하지 않으면 생성
O_EXCL 파일이 있는 경우 에러 발생
O_APPEND 쓰기 작업시 파일 끝에 새로운 내용 추가
O_TRUNC 기존 내용 삭제 후 쓰기

 

 

 

creat(2)

int creat(const char* path, mode_t mode);
  • 1번 파라미터 : 새로운 파일 생성 경로
  • 2번 파라미터 : 접근 권한

 

 

close(2)

int close(int fd);
  • 1번 파라미터 : 닫고자 하는 파일의 디스크립터

 

read(2)

ssize_t read(int fd, void *buf, size_t count);
  • 1번 파라미터 : 읽고자 하는 파일 디스크립터
  • 2번 파라미터 : 읽어 들인 데이터를 저장할 버퍼
  • 3번 파라미터 : 읽어 들일 데이터의 크기 (byte 단위)

 

write(2)

ssize_t write(int fd, const void* buf, size_t count);
  • 1번 파라미터 : 저장할 파일 디스크립터
  • 2번 파라미터 : 쓸 데이터를 저장되어 있는 버퍼
  • 3번 파라미터 : 쓸 데이터의 크기 (byte 단위)

 

※ offset : 특정 위치를 기준으로 상대적인 위치 (읽기/쓰기 포인터)

 

 

lseek(2)

off_t lseek(int fd, off_t offset, int whence);
  • 1번 파라미터 : 열려 있는 파일 디스크립터
  • 2번 파라미터 : offset (기준점 : 어디서부터 읽을건지../쓸건지.. )
  • 3번 파라미터 : 기준점

 

기준점 explain
SEEK_SET 파일의 첫 부분
SEEK_CUR 현재 읽/쓰기 포인터 위치
SEEK_END 파일의 끝(EOF)

 

 

 

 

 

 


파일 입출력

 

 

fopen(3)

FILE *fopen(const char *path, const char *mode);
  • 1번 파라미터 : 열고 싶은 파일 경로
  • 2번 파라미터 : 파일 열 때 접근권한

 

mode read wrtie create open() 함수 비교
"r" O X X O_RDONLY
"r+" O O X O_RDWR
"w" X O O O_WRONLY | O_CREAT | O_TRUNC
"w+" O O O O_RDWR | O_CREAT | O_TRUNC
"a" X O O O_WRONLY | O_CREAT | O_APPEND
"a+" O O O O_RDWR | O_CREAT | O_APPEND

 

 

 

fclose(3)

int fclose(FILE *stream);
  • 1번 파라미터 : 닫고자 하는 FILE의 pointer

 

 

fread(3)

size_t fread(void *buf, size_t size, size_t nmemb, FILE *stream);
  • 1번 파라미터 : 읽은 데이터 저장할 버퍼
  • 2번 파라미터 : 1번에 읽을 데이터 크기
  • 3번 파라미터 : 몇 번에 걸쳐 데이터 읽을 건지...
  • 4번 파라미터 : File Pointer

 

 

perror 함수

void perror(const char *str)
  • 표준에러로 사용자 정의 오류 메시지(str)와 시스템 오류 메시지 출력

 

 

fwrite(3)

size_t fwrite(const void *buf, size_t size, size_t nmemb, FILE *stream);
  • 1번 파라미터 : 쓸 데이터가 저장된 버퍼
  • 2번 파라미터 : 1번에 쓸 데이터 크기
  • 3번 파라미터 : 몇 번에 걸쳐 데이터 쓸건지...
  • 4번 파라미터 : File Pointer

 

 

strlen 함수

size_t strlen(const char *str);
  • 지정된 문자열(str) 길이 반환

 

 

fseek(3) : 읽/쓰기 포인터 위치 이동

int fseek(FILE *stream, long int offset, int whence);
  • 1번 파라미터 : File Pointer
  • 2번 파라미터 : offset
  • 3번 파라미터 : 기준점 (SEEK_SET, SEEK_CUR, SEEK_END)

 

 

rewind 함수 : 읽/쓰기 포인터(offset) 위치를 파일 처음으로 이동

void rewind(FILE *stream);

//fseek(fp, 0, SEEK_SET) 동일

 

 

 

ftell 함수 : 현재 읽/쓰기 포인터(offset) 반환

long int ftell(FILE *stream);

 

 

fflush(3) : 강제로 버퍼 내용 출력

int fflush(FILE* stream);
  • 1번 파라미터 : File Pointer
  • `fflush(NULL);` : 열려있는 모든 스트림의 버퍼 내용 출력

 

 

반응형

'CS > Linux' 카테고리의 다른 글

Process & Signal  (0) 2023.08.29
디렉토리 관리 관련 함수  (0) 2023.08.29
파일 관리 관련 함수  (0) 2023.08.29
텍스트 에디터(vi)  (0) 2023.08.28
리눅스 구조 & 명령어  (0) 2023.08.27