본문 바로가기

개발새발 개발자/C

[C언어] 입출력 함수-파일에 문자열 쓰기

1. 파일 포인터 가져오기

파일에 문자열을 쓸 때는 먼저 fopen 함수로 파일을 열어서 파일 포인터를 가져와야 한다. stdio.h에 선언되어있다.


1
2
3
4
5
6
FILE *포인터이름 = fopen(파일명, 파일모드);
 
FILE *fopen(char const *_FileName, char const *_Mode);
 
FILE *fp = fopen("hello.txt""w");
 
cs


파일 모드에는 다양한 종류가 있다.

"r"읽기 전용파일을 읽기 전용으로 엽니다. 단, 파일이 반드시 있어야 합니다.
"w"쓰기 전용새 파일을 생성합니다. 만약 파일이 있으면 내용을 덮어씁니다.
"a"추가파일을 열어 파일 끝에 값을 이어 씁니다. 만약 파일이 없으면 파일을 생성합니다.
"r+"읽기/쓰기파일을 읽기/쓰기용으로 엽니다. 단, 파일이 반드시 있어야 하며 파일이 없으면 NULL을 반환합니다.
"w+"읽기/쓰기파일을 읽기/쓰기용으로 엽니다. 파일이 없으면 파일을 생성하고, 파일이 있으면 내용을 덮어씁니다.
"a+"추가(읽기/쓰기)파일을 열어 파일 끝에 값을 이어 씁니다. 만약 파일이 없으면 파일을 생성합니다. 읽기는 파일의 모든 구간에서 가능하지만, 쓰기는 파일의 끝에서만 가능합니다.
t텍스트 모드파일을 읽거나 쓸 때 개행문자 \n와 \r\n을 서로 변환합니다.
^Z 파일의 끝으로 인식하므로 ^Z까지만 파일을 읽습니다(^Z는 Ctrl+Z 입력을 뜻합니다).
b바이너리 모드파일의 내용을 그대로 읽고, 값을 그대로 씁니다.


2. 파일에 쓰기

파일에 쓰는 방법은 두 가지가 있다. 서식이 있거나, 없거나.


1) fprintf

1
2
3
4
5
fprintf(파일포인터, 서식, 값1, 값2, ...);
 
int fprintf(FILE * const _Stream, char const * const _Format, ...);
 
fprintf(fp, "%s %d\n""Hello"100);
cs

fprintf는 서식대로 파일에 저장한다.

위의 코드는 스트링과 정수를 저장하는 서식을 지정했다.


1
fprintf(stdout, "%s %d\n""Hello"100);
cs

stdout을 활용하면 화면(콘솔)에 문자열을 출력한다.


2) fputs

1
2
3
4
5
fputs(버퍼, 파일포인터);
 
int fputs(char const *_Buffer, FILE *_Stream);
 
fputs("Hello, world!", fp);
cs

fprintf와 달리, 서식 없이 문자열 그대로 파일에 쓰는 기능이다.


1
fputs("Hello, world!", stdout);   
cs

stdout 사용 또한 가능하다.


3) fwrite

1
2
3
4
5
write(버퍼, 쓰기크기, 쓰기횟수, 파일포인터);
 
size_t fwrite(void const *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);
 
fwrite(s1, strlen(s1), 1, fp); 
cs

fputs와 달리 쓰기 크기와 횟수를 지정해야 한다.


1
fwrite(s1, strlen(s1), 1, stdout); 
cs

stdout도 사용 가능하다.


3. 파일 포인터 닫기

파일 쓰기가 끝났으면 반드시 fclose 함수로 파일 포인터를 닫아야 한다. 파일 포인터를 구조체 FILE 크기만큼 동적 메모리를 할당한 것이기 때문에 fclose 함수로 닫아주지 않으면 메모리 누수가 발생한다.


1
fclose(fp);   
cs


4. 정리

fopen() -> fprintf() / fputs() / fwrite() -> fclose() 순으로 진행된다.




출처)

https://dojang.io/mod/page/view.php?id=607

https://dojang.io/mod/page/view.php?id=609