파일 입출력 fopen

2019. 11. 10. 03:46·C/C

 

1. 기본 구조

 

 

2. fopen함수

 

Interface File * fopen(const char* filePath, const char* mode)
Parameter

filePath: 파일 경로

mode: 옵션이 되는 모드

Return

Sucess: File Stream (FILE 구조체 변수의 주소 값)

Fail: Null Pointer

Option

r: read mode (입력 stream)

w: write mode (출력 stream)

a: appendix mode (덧붙여 쓰기)

 

Function 원하는 파일스트림을 생성하고 파일 디스크립터를 리턴한다.

File 구조체의 포인터는 사실상 파일을 가리키는 'File Descriptor' 역할을 한다.

 

3. fclose함수

Interface int * fclose(FILE *stream)
Parameter

stream: 열려있는 파일의 Stream

Return

0: success

-1: fail >> EOF(End Of File)

Function 열려있는 File stream을 해제한다.

 

4. fgets 함수

Interface char *fgets(char * str, int size, FILE * stream)
Parameter

str: 입력된 버퍼

size: 읽어올 문자올 수

stream: 파일 포인터

Return

지정된 파일의 문자열

Function 파일포인터에 담긴 파일의 문자열 지정된 size만큼 읽어오는 함수

 

5. fputs 함수

Interface int *fputs(const char * str, FILE * fp)
Parameter

str: 지정된 버퍼

fp: 지정된 파일 포인터

 

Return

0 or 양수: Success

-1 음수 : Fail (EOF)

Function 한줄의 문자열을 지정된 파일포인터가 가리키는 파일에 저장한다.

6. FILE STREAM

FILE STREAM 개념도

 

예제에서 쓰이는

fputs, fputc => 파일에 '출력'("w") (write)  // Output Stream

fgets, fgetc => 파일로부터 '입력'("r") (read) // Input Stream

 

gets, getc => 표준입력(stdin)으로부터 버퍼에 '입력'

puts, putc => 버퍼로부터 표준 '출력' (stdout)

 

 

7. 예제

 

a.txt의 파일 내용이 b.txt로 복사된다.

 

 

7.1 예제2

다음 코드는 문제가있다.

 

이 코드에는 문제가 있다.

data.txt 파일에 "A B C"라는 문자열을 넣고

ch라는 character 변수에 한문자씩 받아와 출력하는 코드므로

실행결과가 "A B C"가 나와야 하지만

아무 문자도 나오지 않는다.

 

※원인 ※

출력 스트림 fp1을 통해 "A B C"라는 문자열을 모두 data.txt에 쓰기도전에(fputs)

입력 스트림 fp2를 통해 data.txt 빈 상태의 문자들을 모두 읽어들였기 때문이다. (fgetc)

◆ 해결 

문자열을 모두 출력버퍼를 통해 쓰고난 후 출력 파일 스트림(fp1)을 닫는다.

그 후에 입력버퍼를 통해 읽어들인다(fp2)

fp1 출력버퍼에 "A B C"문자열이 모두 입력되고 닫은 후에

 

모든 문자열 입력후에 파일 스트림을 닫고나서

입력 스트림을 통해 읽어오면 된다.

실행 결과!

 

 

8. 참고

 

fprintf, fscanf 등의 함수의 매개변수에서 파일 포인터 부분을 보면 FILE* const _Stream와 같이 스트림(stream)이라고 되어 있습니다. 보통 파일 포인터를 파일 스트림이라고도 하는데 스트림은 물 등의 액체가 흐르는 것을 뜻합니다. 파이프 속에 물이 계속 흘러다니는 것처럼 파일 스트림도 파일의 데이터를 연속적으로 처리한다고 해서 스트림입니다.

즉, 파일에서 데이터를 처리할 때마다 매번 파일을 여는 것이 아니라 파일 스트림을 한 번 생성해서 계속 데이터를 쓰거나 가져오는 방식이죠. 여기서 fopen으로 파일을 읽기 전용으로 열면 입력 스트림, 쓰기 전용으로 열면 출력 스트림, 읽기/쓰기로 열면 입출력 스트림입니다. 파일 모드에 따라 단방향, 양방향이 되죠. 마찬가지로 stdin은 입력 스트림, stdout, stderr는 출력 스트림입니다.

 

참고 출처: https://dojang.io/mod/page/view.php?id=608

 

C 언어 코딩 도장: 70.2 서식을 지정하여 파일에서 문자열 읽기

이제 앞에서 생성한 hello.txt 파일의 내용을 읽어보겠습니다. 파일을 읽을 때도 fopen 함수로 파일을 열어서 파일 포인터를 얻은 뒤 fscanf 함수로 서식을 지정하여 파일의 내용을 읽습니다(stdio.h 헤더 파일에 선언되어 있습니다). fscanf(파일포인터, 서식, 변수의주소1, 변수의주소2, …); int fscanf(FILE * const _Stream, char const * const _Format, ...); 성공하면 읽어온 값의

dojang.io

 

저작자표시 (새창열림)

'C > C' 카테고리의 다른 글

Dangling Pointer (feat. Memory Map)  (0) 2020.03.01
main 함수 (feat. argc, argv)  (0) 2019.11.10
Memory Map 이해하기(Feat.성적처리 프로그램 소스)  (0) 2019.10.02
2차원 배열 이해  (0) 2019.09.29
배열 초기화 사소한 Tip  (0) 2019.09.26
'C/C' 카테고리의 다른 글
  • Dangling Pointer (feat. Memory Map)
  • main 함수 (feat. argc, argv)
  • Memory Map 이해하기(Feat.성적처리 프로그램 소스)
  • 2차원 배열 이해
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • 기타 (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • 잡동사니 (27)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    java
    JPA
    알고리즘
    Git
    프로그래머스
    C++
    kafka
    database
    ubuntu
    Kotlin
    PostgreSQL
    Spring
    android
    javascript
    algorithm
    Bitcoin
    docker
    linux
    백준
    Programmers
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
파일 입출력 fopen
상단으로

티스토리툴바