반응형
시작하기에 앞서서 파일디스크립터에 대해 알아보도록 하겠습니다.
파일 디스크립터(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 |