コード例 #1
0
ファイル: os_hw2.cpp プロジェクト: kahissa/hw2
int _tmain(int argc, _TCHAR* argv[])
{
	uint32_t uSize = 5000; // 4gb 이상 가능
	LARGE_INTEGER Size;    // 

	DWORD bufSize = 2048;  // 32bit가 4gb 인데 실질적으로 2gb 사용 가능
	// 그러니 최대인 2048M 씩 할당
	LARGE_INTEGER offset;  // 크기
	offset.QuadPart = (LONGLONG)0;

	StopWatch sw1, sw2;



	Size.QuadPart = (LONGLONG)(1024 * 1024) * (LONGLONG)uSize;;

	_ASSERTE(create_very_big_file(L"big.txt", uSize));

	sw1.Start();
	_ASSERTE(file_copy_using_read_write(L"big.txt", L"big2.txt"));
	sw1.Stop();
	print("info] time elapsed = %f", sw1.GetDurationSecond());


	PUCHAR buf = (PUCHAR)malloc(bufSize);


	sw2.Start();

	FileIoHelper Helper;
	Helper.FIOpenForRead(L"big.txt");
	Helper.FIOCreateFile(L"big3.txt", Size);

	while (offset.QuadPart < Size.QuadPart)
	{
		if ((Size.QuadPart - offset.QuadPart) >(LONGLONG)bufSize)
			bufSize = 2048;
		else
			bufSize = (DWORD)(Size.QuadPart - offset.QuadPart);

		Helper.FIOReadFromFile(offset, bufSize, buf);
		Helper.FIOWriteToFile(offset, bufSize, buf);

		offset.QuadPart += (LONGLONG)bufSize;
	}
	sw2.Stop();
	print("info] time elapsed = %f", sw2.GetDurationSecond());


	return 0;
}
コード例 #2
0
ファイル: 과제2.cpp プロジェクト: M0nk2y/HW
int _tmain(int argc, _TCHAR* argv[])
{
	 uint32_t goalsize = 6144; // 6GB
	 
	 
    _ASSERTE(create_very_big_file(L"big.txt",goalsize));//목표크기 6GB만큼 파일 생성


    StopWatch sw; 
    sw.Start();
    _ASSERTE(file_copy_using_read_write(L"big.txt", L"big2.txt"));
    sw.Stop();   
    print("info] (Read Write) time elapsed = %f", sw.GetDurationSecond());


	LARGE_INTEGER _Filesize; 
	_Filesize.QuadPart = (LONGLONG)(1024*1024)*(LONGLONG)goalsize;//파일의 크기 6GB 설정하기위해 LARGE_INTEGER
	DWORD bufS = 4096; // read.write에서 buf가 4096이므로 4096설정
	PUCHAR buf = (PUCHAR)malloc(bufS);

	LARGE_INTEGER _Offset;
	_Offset.QuadPart = 0; //파일을 옮겨주는 계산을 하는데 사용한다.



    StopWatch sw2;
	sw2.Start();
    
	FileIoHelper FileHelp;
	FileHelp.FIOpenForRead(L"big.txt");
	FileHelp.FIOCreateFile(L"big3.txt", _Filesize);

	while(_Filesize.QuadPart > _Offset.QuadPart)         
	{
		if((_Filesize.QuadPart - _Offset.QuadPart) > (LONGLONG)bufS)
			bufS = 4096;
		
		else
			bufS = (DWORD)(_Filesize.QuadPart - _Offset.QuadPart);

		FileHelp.FIOReadFromFile(_Offset, bufS, buf);
		FileHelp.FIOWriteToFile(_Offset, bufS, buf);
		_Offset.QuadPart += (LONGLONG)bufS;
	}
    sw2.Stop();
    print("info] (Memory Map) time elapsed = %f", sw2.GetDurationSecond());


    return 0;
}
コード例 #3
0
int _tmain(int argc, _TCHAR* argv[])
{

	// current directory 를 구한다.
	wchar_t *buf = NULL;
	uint32_t buflen = 0;
	buflen = GetCurrentDirectoryW(buflen, buf);
	if (0 == buflen)
	{
		print("err ] GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		return false;
	}

	buf = (PWSTR)malloc(sizeof(WCHAR) * buflen);
	if (0 == GetCurrentDirectoryW(buflen, buf))
	{
		print("err ] GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		free(buf);
		return false;
	}

	// current dir \\ test.txt 파일명 생성
	wchar_t file_name[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\test.txt",
		buf)))
	{
		print("err ] can not create file name");
		free(buf);
		return false;
	}

	// current dir \\ test2.txt 파일명 생성
	wchar_t file_name2[260];
	if (!SUCCEEDED(StringCbPrintfW(
		file_name2,
		sizeof(file_name2),
		L"%ws\\test2.txt",
		buf)))
	{
		print("err ] can not create file name");
		free(buf);
		return false;
	}

	free(buf); buf = NULL;

	FileIoHelper MMIOFILE;
	FileIoHelper MMIOFILE2;
	LARGE_INTEGER file_size;
	LARGE_INTEGER offset;
	PUCHAR buff;

	offset.QuadPart = 0;

	if (is_file_existsW(file_name))
	{
		MMIOFILE.FIOpenForRead(file_name);
		file_size = *MMIOFILE.FileSize();
	}
	else
	{
		file_size.QuadPart = (unsigned long long)1 * 501 * 1024 * 1024;
		MMIOFILE.FIOCreateFile(file_name, file_size);
	}

	MMIOFILE2.FIOCreateFile(file_name2, file_size);
	// 복사의 개념과는 약간 다른 것 같지만 복사를 하기 위해 먼저 같은 크기의 파일을 생성한 다음 내부 데이터를 덮어씌우는 형태로 구현하였다.


	// copy
	buff = (PUCHAR) malloc((500 * 1024 * 1024 + 1)*sizeof(UCHAR));
	while (1)
	{
		if (offset.QuadPart + 500 * 1024 * 1024 < file_size.QuadPart)
		{
			MMIOFILE.FIOReadFromFile(offset, 500 * 1024 * 1024, buff);
			MMIOFILE2.FIOWriteToFile(offset, 500 * 1024 * 1024, buff);
			offset.QuadPart += 500 * 1024 * 1024;
		}
		else
		{
			MMIOFILE.FIOReadFromFile(offset, file_size.QuadPart - offset.QuadPart, buff);
			MMIOFILE2.FIOWriteToFile(offset, file_size.QuadPart - offset.QuadPart, buff);
			offset.QuadPart = file_size.QuadPart;
			break;
		}
	}

	return 0;
}
コード例 #4
0
ファイル: ConsoleApplication1.cpp プロジェクト: GrayField/BoB
int _tmain(int argc, _TCHAR* argv[])
{
	/*
	_ASSERTE(create_very_big_file(L"big.txt", 5000));

	StopWatch sw2;
	sw2.Start();
	_ASSERTE(file_copy_using_memory_map(L"big.txt", L"big3.txt"));
	sw2.Stop();
	print("info] time elapsed = %f", sw2.GetDurationSecond());


	StopWatch sw;
	sw.Start();
	_ASSERTE(file_copy_using_read_write(L"big.txt", L"big4.txt"));
	sw.Stop();
	print("info] time elapsed = %f", sw.GetDurationSecond());
	*/

	FileIoHelper Helper;
	uint64_t size=5000;
	LARGE_INTEGER file_size;
	LARGE_INTEGER offset;
	offset.QuadPart = 0;
	DWORD bufsize = 2048*1024*1024;
	PUCHAR buf = (PUCHAR)malloc(bufsize);

	file_size.QuadPart = (1024 * 1024) * size;

	

	
	_ASSERTE(create_very_big_file(L"big.txt", size));

	StopWatch sw2;
	sw2.Start();
	Helper.FIOpenForRead(L"big.txt");
	Helper.FIOCreateFile(L"big2.txt", file_size);

	while (offset.QuadPart < file_size.QuadPart) {
		if ((file_size.QuadPart - offset.QuadPart) >(LONGLONG)bufsize)
		{
			bufsize = 2048*1024*1024;
		}
		else {
			bufsize = (DWORD)(file_size.QuadPart - offset.QuadPart);
		}

		Helper.FIOReadFromFile(offset, bufsize, buf);
		Helper.FIOWriteToFile(offset, bufsize, buf);

		offset.QuadPart += (LONGLONG)bufsize;
	}

	sw2.Stop();
	print("info] time elapsed = %f", sw2.GetDurationSecond());


	StopWatch sw;
	sw.Start();
	_ASSERTE(file_copy_using_read_write(L"big.txt", L"big3.txt"));
	sw.Stop();
	print("info] time elapsed = %f", sw.GetDurationSecond());



	
	_getwch();
	return 0;
}