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", 20, 30, 40, 90, 30 }; // 예외처리를 해야 맞지만 편의상 생략하였다. 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