본문 바로가기
Language/C언어

C041_read함수 사용하기

by OdOp 관리자 2023. 12. 28.
반응형

시작하기에 앞서서 파일디스크립터에 대해 알아보도록 하겠습니다. 

 

파일 디스크립터(File Descriptor)란?

리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(file)을 다룰 때에 사용하는 개념입니다. 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값입니다. 

 

이때 파일 디스크립터 양수 값으로 저장이 되며 0, 1, 2는 아래와 같은 이유로 사용되기 때문에 제외됩니다.  

0 : 표준 입력(Standard Input)
1 : 표준 출력(Standard Output)
2 : 표준 에러(Standard Error)

 

 

이제 파일을 열어보도록 하겠습니다. 

open함수를 사용해서 파일을 열게 됩니다. 

open() 함수

헤더 : fcntl.h
형태 : int open(const char *FILENAME, int FLAGES)
인수 : FILENAME(파일 이름), FLAGES(파일에 대한 열기 옵션 / O_RDONLY, O_WRONLY, O_RDWR)
반환 : 성공시 양수, 실패하면 -1
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main(void)
{
    int fd;

    fd = open("./test.txt", O_RDONLY);
    printf("%d\n", fd);  //3
    return (0);
}

 

read함수를 사용하여서 파일을 읽어보도록 하겠습니다. 

read() 함수 

헤더 : unistd.h
형태 : ssize_t read(int fd, void *buf, size_t nbytes)
인수 : fd(파일 디스크립터), buf(저장 공간), nbytes(읽어 들일 크기)
반환 : 성공시 읽어 들인 바이트 수, 실패시 -1

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

int BUFFER_SIZE = 5;

int main(void)
{
    int     fd;
    int     read_size;
    char    *buf;

    buf = malloc(sizeof(char) * (BUFFER_SIZE + 1));
    if (buf < 0)
    {
        printf("Malloc fails.\n");
        return (0);
    }
    fd = open("./test.txt", O_RDONLY);
    if (fd < 0)
    {
        printf("File does not open.\n");
        free(buf);
        return (0);
    }
    read_size = read(fd, buf, BUFFER_SIZE);
    if (read_size < 0)
    {
        printf("read fails.\n");
        free(buf);
        return (0);
    }
    buf[read_size] = '\0';
    printf("%s\n", buf);
    free(buf);
    return (0);
}

 

read함수의 반환값을 사용하여 문자열 끝을 알아냅니다. 

코드를 보시면 충분히 이해하실 수 있으실 것입니다. 

반응형

'Language > C언어' 카테고리의 다른 글

C043_가변인자 사용하기  (0) 2023.12.30
C042_Makefile 만들기  (2) 2023.12.29
C040_strlen 함수 구현해서 사용하기  (0) 2023.12.08
C039_putnbr만들기  (0) 2023.12.06
C038_atoi 함수 구현해서 사용하기  (3) 2023.12.04