[C] open, read, close...perror

Austin·2024년 11월 24일

C언어

목록 보기
2/5

open, read, close 함수는 주로 C 언어에서 파일을 다룰 때 사용된다.
함수들은 각각 파일을 열고, 파일에서 데이터를 읽고, 파일을 닫는 기능을 수행한다.

open() 함수

open() 함수는 파일을 열거나 생성하는 데 사용된다.

#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);

주요 매개변수

  • pathname: 열고자 하는 파일의 경로
  • flags: 파일 열기 모드를 지정하는 플래그
  • mode: 파일 생성 시 권한 설정 (O_CREAT 플래그 사용 시)

주요 플래그

플래그설명
O_RDONLY읽기 전용 모드
O_WRONLY쓰기 전용 모드
O_RDWR읽기/쓰기 모드
O_CREAT파일이 없으면 생성
O_APPEND파일 끝에 데이터 추가
O_TRUNC파일을 열 때 내용 삭제

반환값

  • 성공 시 : 파일 디스크립터 (양의 정수)
  • 실패 시 : -1

read() 함수

read() 함수는 열린 파일에서 데이터를 읽어온다.

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

주요 매개변수

  • fd: 파일 디스크립터
  • buf: 데이터를 저장할 버퍼
  • count: 읽어올 바이트 수

반환값

  • 성공 시: 실제로 읽은 바이트 수
  • 파일의 끝: 0
  • 실패 시: -1

close() 함수

close() 함수는 열린 파일을 닫는다.

#include <unistd.h>
int close(int fd);

주요 매개변수

  • fd: 닫을 파일의 파일 디스크립터

반환값

  • 성공 시: 0
  • 실패 시: -1

파일 읽기 예제

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

#define BUF_SIZE 256

int main() {
    int fd;
    char buf[BUF_SIZE];
    ssize_t bytes_read;

    // 파일 열기
    fd = open("example.txt", O_RDONLY);
    if (fd == -1) {
        perror("파일 열기 실패");
        return 1;
    }

    // 파일 읽기
    bytes_read = read(fd, buf, BUF_SIZE - 1);
    if (bytes_read == -1) {
        perror("파일 읽기 실패");
        close(fd);
        return 1;
    }

    // 널 문자 추가
    buf[bytes_read] = '\0';

    printf("읽은 내용: %s\n", buf);

    // 파일 닫기
    if (close(fd) == -1) {
        perror("파일 닫기 실패");
        return 1;
    }

    return 0;
}

이 예제는 example.txt 파일을 열어 읽어 내용을 출력하고 파일을 닫는 예제 코드이다.

perror

위 코드에 오류 처리하는 perror 함수가 있다.
perror은 C 언어에서 오류 메시지를 출력하는 데 사용되는 표준 라이브러리 함수다.
이 함수는 프로그램 실행 중 발생한 오류에 대한 설명을 표준 오류 스트림(stderr)에 출력한다.

perror 함수의 특징

  • 헤더 파일: <stdio.h>를 포함해야 한다.
  • 함수 원형: void perror(const char *str);
  • 매개변수: 사용자 정의 오류 메시지를 포함하는 문자열 포인터.
  • 반환값: 없음 (void 함수).

동작 방식

  • 사용자가 지정한 문자열(str)을 출력한다.
  • 콜론(:)과 공백을 출력한다.
  • errno 변수에 저장된 현재 오류 코드에 해당하는 오류 메시지를 출력한다.
  • 줄바꿈 문자를 추가한다.

위 코드에서 작성된 오류처리를 보면 아래와 같다.

    // 파일 열기
    fd = open("example.txt", O_RDONLY);
    if (fd == -1) {
        perror("파일 열기 실패");
        return 1;
    }

output
파일 열기 실패: No such file or directory

주의사항

  • perror 함수는 errno 전역 변수를 사용하므로, 오류 발생 직후에 호출해야 한다.
    다른 함수 호출이 errno 값을 변경할 수 있기 때문이다.
  • perror 함수는 디버깅과 오류 처리에 유용하며, 프로그램에서 발생한 오류의 원인을 사용자에게 명확하게 전달하는 데 도움이 된다.

0개의 댓글