C언어 - 파일 입출력
2020. 11. 13. 18:59ㆍ개인공부/C언어
우리가 C언어로 작성하고 실행시키면
운영체제 사이에 스트림이 3개 생긴다
데이터가 시냇물처럼 흘러서 왔다 갔다 할수있는 통로
1. stdout 표준 출력 - 화면출력 장치, 파일
2. stderr 표준 에러 - 화면출력장치, 파일
3. stdin 표준 입력 - 키보드 입력
버퍼 : 데이터 하나씩 오가는게 아니라 버스처럼 많이 채워 오가는것.
게임 저장파일로 캐릭터의 레벨이나 상황등등을 저장해서 첨부터 하는게 아니라 로드해서 저장된 내용부터 게임하는것
데이터를 저장하거나 읽어올때는 2가지 모드를 사용할수있다.
1. 텍스트 파일io스트림
2. 바이너리파일 io스트림
둘다 같이 사용할수도 있다.
텍스트 파일 : 직접적으로 파일을 열어서 볼수 있는것들 (메모장, 노트패드)
문자들을 화면에 그려주는게 운영체제.
(문자로서 저장)
파이너리 파일 : 이진수를 그대로 저장하는 것. 순수한 데이터
운영체제에 따라서 텍스트 파일을 저장하는 방법이 다르다, 언어에 따라서도 다르다.
운영체제마다 인코딩 방식이 다르다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
int ch; // 버퍼로부터 한글자씩 받을수 있게 변수 선언.
FILE* fr; // 파일에 대한 포인터가 아닌
// 파일을 처리할때 필요한 데이터의 묶음에 대한 포인터
/*
typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;
*/
unsigned long count = 0;
if (argc != 2)
{
printf("Usage: %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
if ((fr = fopen(argv[1], "r")) == NULL)// fopen은 fr을 반환
// fr에 저장된 포인터가 NULL이라면 파일을,스트림을 열지 못했다는 뜻
// "r" 은 read
{
printf("Can't open %s\n", argv[1]);
exit(EXIT_FAILURE);
}
// 하드디스크가 가득 찼을때, 읽기전용으로 되어있는 파일을 쓰기를 하려고할때
// 강제로 못열게 만드는 방법이 있다.
/*
fopen mode strings for text files
- r : reading
- w: : creating-and-writing or over-writing
- a: appending or creating-and-writing //appending: 덧붙인다.
- r+: both reading and writing
- w+: reading and writing, over-writing or creating
- a+: reading and writing, appending or creating
*/
//TODO : open file to write with "w" mode string
while ((ch = fgetc(fr)) != EOF) // getc(fr) 한글자씩 받아오고있다
{
//putc(ch, stdout); // same as puchar(ch);
fputc(ch, stdout);
//stdout을 다른 스트림으로 바꿔치기 할 수 있다.
//TODO : use fputs() to write a file stream!
count++;
}
fclose(fr);
//TODO
printf("FILE %S has %lu character\n", argv[1], count);
return 0;
}
출처 : 홍정모의 따라배우는 C언어.
'개인공부 > C언어' 카테고리의 다른 글
C언어 - 구조체를 다른 구조체의 멤버로 사용하기 (0) | 2020.11.15 |
---|---|
C언어 - 구조체의 기본적인 사용법 (0) | 2020.11.14 |
C언어 - 멀티쓰레딩 (Multi - Threading) (0) | 2020.11.13 |
C언어 - 동적 할당 메모리와 저장 공간 분류 (0) | 2020.11.13 |
C언어 - 동적 할당 메모리를 배열처럼 사용하기 (0) | 2020.11.13 |