3. 파일 입출력
3) 데이터 쓰기
▣fwrite
- 함수 원형 : fwrite(쓸 데이터 주소, 크기, 반복횟수, 대상 파일 정보)
- 여기서 반복횟수는 그 수만큼 쓰기를 반복하는게 아닌 크기×반복횟수의 크기만큼 쓴다는 뜻.
#include <stdio.h> int main() { FILE * f; f = fopen("a.txt", "w+"); if (f) { fwrite("abcdefg", 7, 1, f); fclose(f); } return 0; }
4) 데이터 읽기
▣ fread
- 함수원형 : int(성공한 작업횟수를 반환) fread(저장공간, 크기, 반복횟수, 대상 파일 정보)
- 성공한 작업횟수는 해당크기를 완전히 채운 한 싸이클을 하나라고 침.
- 즉 한번을 읽어올때 크기 보다 작은 수의 글자를 읽어오게 되면 0을 반환.
#include <stdio.h> int main() { FILE * f; char sz[50] = { 0 }; f = fopen("a.txt", "r"); if (f) { printf("%d\n",fread(sz, 50, 1, f)); printf("sz : %s\n", sz); fclose(f); } return 0; }
- a.txt의 내용은 7글자임. 그 결과 fread의 리턴값을 출력하면 50보다 작기때문에 0을 반환함.
- 이런 경우를 대비하여 대부분
fread(sz, 1, 10, f) 이런 식으로 1바이트씩 여러번을 반복하여 읽어오는게 더 좋다.
5) 그 외 파일처리 관련 함수
▣ 위의 fread, fwrite 함수는 문자열 처리함수가 아닌 파일 바이너리 data를 읽고 쓰는 함수임!!
▣ 단일문자 파일 입출력 함수
- one = fgetc(fin); // 파일에서 읽어옴.
- fputc(one, fout); // 파일에다 씀.
▣ 문자열 파일 입출력 함수
- fgets(buffer, sizeof(buffer), fin); // 파일에서 읽어옴.
- fputs(buffer, fout); // 파일에다 씀.
▣ 서식화된 파일 입출력 함수
- fscanf(fin, "%s", &buffer); // 파일에서 읽어옴.
- fprintf(fout, "%s", buffer); // 파일에다 씀.
☞ fgets, fputs, fscanf, fprintf는 앞서 봤던 함수들과 비슷하지만 stdin, stdout이 아닌 특정 파일에 읽고 쓰는 것이기 때문에
직접 파일 포인터를 설정해줘야 함.
i2sec 대구지점 23기 수료생.
'해킹&보안 > C언어' 카테고리의 다른 글
[D+18] 파일 입출력 심화(스테가노그래피) (2) | 2017.03.06 |
---|---|
[D+17] 함수 (0) | 2017.03.02 |
[D+15] 파일 입출력 (1) (0) | 2017.02.27 |
[D+14] C언어 기초 (7) (0) | 2017.02.26 |
[D+13] C언어 기초 (6) (0) | 2017.02.23 |