#include <stdio.h>
int main()
{
FILE* fp = NULL;
if (fopen_s(&fp, "test.dat", "wb"))
{
return 1;
}
fwrite("\x00\x11\x22\x33", 4, 1, fp);
fwrite("\x44\x55\x66\x77", 4, 1, fp);
fwrite("\x88\x99\xAA\xBB", 4, 1, fp);
//fseek(fp, 1024 * 1024 * 1024, SEEK_SET); // disk 확보
fwrite("ABCD", 4, 1, fp);
fclose(fp);
return 0;
}
C언어에서 파일시스템을 입력하기 위해 FILE 구조체를 사용한다.
보안 결함상 fopen() -> fopen_s()함수를 사용한다.
fopens("파일구조체명", "파일명", "접근방법")
방법으로 사용한다.
위의 예제에서는 fp파일구조체안에 test.dat로 wb 바이너리 쓰기모드로 접근한다라는 의미이다.
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
ptr := 쓰려는 데이터의 주소를 가리키는 포인터
size := 한개의 데이터 크기(Byte단위)
count := 쓰려는 데이터 요소의 갯수
stream := 파일 포인터
fwrite함수는 prt이 가리키는 데이터를 size * count 바이트 만큼 파일에 쓴다.
성공시 => 실제로 쓴 데이터의 갯수를 반환
실패시 => 데이터의 갯수와 다른값이 반환된다.
위의 예제로 파일을 저장한 결과를 Hxd로 실행시켜보았다.
결과

int fseek(FILE *stream, long offset, int origin);
stream := 파일포인터
offset := 이동할 바이트 수
origin := 이동의 기준이 되는 위치를 나타내는 상수
( SEEK_SET, SEEK_CUR, SEEK_END 중 하나를 선택)
주석의 의미는
fp 파일 포인터를 1GB위치로 이동하고 SEEK_SET은 파일의 시작을 기준으로 이동하는 것을 말한다.
주석문을 해제하고 실행시키면

1GB를 할당하고 밑의 ABCD문자열을 입력한 것을 확인할수 있다.
속성

1GB의 크기를 확인 할수 있다.