[DAY 10] FILE I/O
programming/c

[DAY 10] FILE I/O

FILE I/O

c 언어에서는 하드웨어도 파일로 인식한다.


ex. fflush : buffer clear function

stdin : file pointer


file을 가리키기 위해서 file pointer를 쓴다. 포인터는 주소만 알면 마음대로 할 수 있기 때문에!


(공책 참고)\


텍스트 모드, 바이너리 모드

텍스트 모드는 파일에 1번 써 2번 써 3번 써 이렇게 한다.

바이너리 모드는 1번부터 6번 사이즈만큼 써


읽어올 때는 텍스트 모드는 1번째꺼 읽어와 2번째꺼 읽어와 이런 식으로(쓴 순서대로)

*/



ㆍ 파일 포인터의 모형


FILE *fp;


ㅁㄴㅇㅁㄴㅇ





ㆍ "w" mode


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
void main()
{
    FILE *fp = NULL;
 
    char name[20= "captain america";
    int age = 100;
 
    if ((fp = fopen("a.txt""w")) == NULL) {
        puts("failed to open file!");
        exit(-1);    // dirty shutdown
    }
 
    // printf("%s\t%d \n", name, age);
    fprintf(fp, "%s\t%d \n", name, age);
    // ㄴ data entered on file
 
    fclose(fp);
}
cs


FILE *fp = NULL; // 현재 파일포인터가 아무데도 가르키고 있지 않다


// 파일 포인터가 메모리를 잡았으면 그 주소값이 올거고

        // 파일 오픈하는데 실패하면 NULL return한다.

        if ((fp = fopen("a.txt", "w")) == NULL) { // 파일열었다

                 puts("파일 열기 실패");

                 exit(-1);                // 비정상적 종료

        }       // "w" 모드는 파일을 무조건 새로 만드는구나

 

        // printf("%s\t%d\n", name, age);

        fprintf(fp, "%s\t%d\n", name, age);


ㅁㄴㅇㅁㄴㅇ


ㆍ "a" mode


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
    appendix mode
*/
 
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
void main()
{
    FILE *fp = NULL;
 
    char name[10= "pororo";
    int age = 20;
 
    if ((fp = fopen("a.txt""a")) == NULL) {
        puts("failed to open file!");
        exit(-1);
    }
 
    fprintf(fp, "%s\t%d \n", name, age);
 
    fclose(fp);
}
cs





ㅁㄴㅇㅁ


ㆍ 확장


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
 
typedef struct _student {
    char name[10];
    int kor, eng, math;
    int total;
    float avg;
} STUDENT;
 
void main()
{
    FILE *fp;
    STUDENT stu = { "superman"2030409030 };
    
    // 예외처리를 해야 맞지만 편의상 생략하였다.
    fp = fopen("b.txt""w");
 
    // 일일이 기록할 데이터들을 다 써야 한다.
    fprintf(fp, "%s %d %d %d %d %f \n",
            stu.name, stu.kor, stu.eng, stu.math, stu.total, stu.avg);
 
    fclose(fp);
}
cs




ㄴㅇㅁㅇ

asdasdad