파일시스템 - C언어

홍성우·2023년 6월 6일

자료구조 (C언어)

목록 보기
14/15
#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로 실행시켜보았다.
결과

  1. 위의 주석표시를 해제한다.
int fseek(FILE *stream, long offset, int origin);

stream := 파일포인터
offset := 이동할 바이트 수
origin := 이동의 기준이 되는 위치를 나타내는 상수
( SEEK_SET, SEEK_CUR, SEEK_END 중 하나를 선택)

주석의 의미는
fp 파일 포인터를 1GB위치로 이동하고 SEEK_SET은 파일의 시작을 기준으로 이동하는 것을 말한다.

주석문을 해제하고 실행시키면

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

속성

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

profile
제 블로그를 방문해 주셔서 감사합니다

0개의 댓글