임베디드 개발(before)/IoT 임베디드 SW 개발자 양성과정

[10일차] C언어 교육-(파일 개방과 입출력 함수)

주운녕 2020. 7. 24. 22:43

1. 파일 개방과 입출력을 하기 위해선 파일 포인터가 필요하다. FILE = *fp

2. ex) fopen("a.txt", "r"); //읽기 전용으로 개방

3. 함수 원형 FILE *fopen(const char *, const char *);

=>                반환형  함수명    매개변수

4. 절대 경로 : "..\\source\\b.txt"

상대 경로 : "data\\a.txt"

5.

  파일이 존재할 때 파일이 없을 때
r 읽기 위해 개방 NULL 반환
w 지우고 쓰기 위해 개방 새로운 파일 생성
a 파일 끝에 추가하기 위해 개방 새로운 파일 생성

(*append : 덧붙이다)

- Stream File

장점 : 1) 입출력 효율 증가. 장치로부터 독립성 증가. => 스트림파일이 없으면 외부 입출력 장치가 바뀔 때마다 함수를 수정해야 한다.

           2) 프로그램과 장치의 입출력 속도차이 감소. => 하드디스크의 동작 속도는 프로그램 데이터 처리속도보다 훨씬 느리다.

=> 스트림파일의 버퍼에 출력 테이터를 모아 한꺼번에 장치로 보내면, 장치가 데이터를 기록하는 동안 프로그램이 다시 버퍼를 채울 수 있다.

  • fgetc : 문자 입력함수 - 파일로부터 한 문자를 입력하여 반환한다.

- 위치 지시자 : 파일 개방시 '0'으로 초기화, 입력 함수가 데이터 읽을 때 그 크기만큼 증가

- fgetc가 마지막 여섯번째 반환 시 EOF를 반환한다.

(=> 파일 크기와 현재까지 읽어들인 데이터의 크기를 비교하여 판단 후, EOF를 반환한다.)

  • fputc : 문자 출력함수 -> 문자가 저장된 txt 파일이 생성된다. (fopen시 write로 파일 생성 후, 문자 쓰기)
  • 기본적으로 개방되는 표준 입출력 스트림파일 - (scanf, printf, getchar, putchar, gets, puts 같은 함수들이 사용)

Stream File 명

용도

연결된 입출력 장치

stdin

표준 입력 스트림

키보드

stdout

표준 출력 스트림

모니터

stderr

표준 에러 스트림

모니터

- 운영체제가 기본적으로 개방

- 버퍼에 저장했다가 EOF뜨면 한 번에 보내는 형식.

  • 파일의 기록방식
 

텍스트(Text)

바이너리(Binary)

저장방식

아스키 코드로 저장

그 외

확인방법

메모장에서 확인

해당 기록 방식을 적용한 별도의 프로그램으로 확인

파일 개방 시 모드 표시 방법

rt, wt, at

rb, wb, ab

 

- 파일 개방시 알맞은 모드에 알맞게 표시

- 별도로 비 표시 시 rt, wt, at가 default

파일의 형태와 개방 모드가 다르면 문제가 생김

 

  • fseek 하면 stream 파일의 버퍼 데이터를 하드디스크로 옮기고, 위치 지시자를 시작 위치(0)로 옮겨준다.
  • fseek(fp, 0, SEEK_SET) == rewind(fp);  //와 동일
  • 파일로부터 데이터를 읽다가 중간에 다시 출력할 경우 사용한다
  • fgets, fputs 와 gets, puts의 차이.
    gets는 편하지만 입력할 저장공간 크기를 인수로 주지않아 메모리 공간을 침범할 수 있다. 또한, puts는 항상 줄을 바꾸므로 문자열을 이어서 출력할 수 없다.
  • 따라서 저장공간 크기를 인수로 정해주는 fgets와 fputs가 안전하고 정확하다.
  • fscanf, fprintf는 scanf, printf와 달리 파일을 지정해서 수행한다.

6. 분할 컴파일 과정 시각화

 

 


* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.