[C언어] 18강 파일 입출력

강지원·2025년 1월 25일

리눅스 기반 C언어

목록 보기
21/24

1. 파일 입출력이란?

파일 입출력이란 파일에 대한 입력과 출력을 의미한다.
파일에 대한 입력이란 디스크상의 특정 위치에 수록되어 있는 자료를 읽어 들여 기억공간에 수록하는 절차라고 할 수 있고, 파일에 대한 출력이란 기억공간에 있는 자료를 디스크상의 특정 위치에 수록하는 절차라고 할 수 있다.

c언어에서는 포인터를 사용하여 자료의 입출력을 수행한다.

1) 스트림(Stream)이란?

프로그램 상에서 (디스크에 있는) 파일을 입력 또는 출력을 하고 싶을 대 가장 먼저해야 하는 일은 프로그램과 파일 사이에서 데이터가 이동할 수 있는 다리를 놓는 것이다. 그 다리 역할을 하는 것을 'Stream' 이라고한다

스트림이라는 것은 운영체제에 의해서 형성되는 소프트웨어적인 상태를 의미하는 것이다. 스트림 형성 시, 파일로부터 데이터를 읽거나 쓸 기본적인 준비가 완료되었다는 것을 알 수 있다.

만약 'write를 이용해 a를 기록해라' 했을 때 그때마다 디스크에 작성하는것은 너무 비효율적이기 때문에, 중간에 스트림이라는 영역을 놔두고 파일에 쓴 것처럼 미리 기록을 해놓고 어느정도 용량이차면 디스크에 저장해주는 역할을 한다. 용량이 안 차고 프로그램이 갑자기 종료되면 스트림에 쓰여있는 것이 저장이 안될 수도 있다.

2) File

파일에 저장되어 있는 값들이 있을 때, seek이라는 함수를 통해 파일 안에 커서를 움직일 수 있다.
파일 맨 끝으로 가면 EOF라는 값을 반환해준다.

3) 파일입출력을 언제 쓰냐

생각보다 별로 없음
옵션 설정할 때 사용
serverip= 127.0.0.1
port=9500
따로 컴파일하지 않아도 파일에 써진 것으로
네트워크 상에 tcp 통신으로 받아서
리눅스는 전부 파일화 하는게 있다
tcp 세션이 열린다.
소켓설정하고
파일 디스크립터 = open(socket);

컴파일러 만들 때
그림파일 저장
동영상 저장
흠........

2. 파일입출력에서 꼭 기억할 것

  1. 파일을 연다(여는 옵션이 있다), fopen(파일이름, 모드)

    • 읽기 모드, 쓰기모드, 추가모드, +모드

    mode = "r" : 읽기
    mode = "w" : 다 지우고 새로 쓰기
    mode = "a" : 이어서 쓰기

  2. 파일을 쓰거나 읽거나, ....

  3. 파일을 닫는다. fclose()

3. 파일입출력하기

1) a.txt 만들기

/* a.txt */
hello world
my name is jiwon.

2) 파일 읽기

#include <stdio.h>

int main(){

        FILE * fd;
        char ch;
        fd = fopen("a.txt","r");   // 파일 열기

        if(fd ==NULL){             // 파일이 잘 열렸는지 확인
                printf("file open error\n");
        }else{
                printf("success\n");
        }

        while(1){ 
                if(ch == EOF){     // 파일 끝까지 읽었으면 break
                        break;
                }
                ch = fgetc(fd);    // 파일 한글자씩 읽어오기
                putchar(ch);
        }
        fclose(fd);

        return 0;
}  

fgetc()는 스트림에서 다음 문자를 읽어서 unsigned char로 변환한 후 int 타입으로 반환합니다. 파일의 끝(EOF)이나 오류가 발생하면 EOF를 반환합니다.
fgetc()를 호출할 때마다 파일에서 현재 위치의 다음 글자를 읽고 파일 포인터가 자동으로 다음 글자로 이동합니다.

실행결과

success
hello world
my name is jiwon.

3) 파일 쓰기

#include <stdio.h>

int main(){

        FILE * fd;
        char ch;
        
        /* 파일 쓰기 */
        fd = fopen("a.txt","a");

        fprintf(fd,"hello ~ 한글도 가능?\n");

        fclose(fd);

        /* 파일 읽기 */
        fd = fopen("a.txt","r");
        
        while(1){
                if(ch == EOF){
                        break;
                }
                ch = fgetc(fd);
                putchar(ch);
        }
        fclose(fd);
        return 0;
}

실행결과

hello world
my name is jiwon.
hello~ 한글도 가능?

표준 입출력

#include <stdio.h>

int main(){
        printf("hi\n");
        fprintf(stdout,"hello\n");
}     

실행결과

hi
hello

표준입출력은 콘솔창에 입출력을 하는것임.

0번 표준 입력 : 키보드
1번 표준 출력 : 콘솔
2번 에러출력 : 콘솔

3번 ~ 4번 : 파일 ,....

0개의 댓글