資源簡介
操作系統試驗之第四文件讀寫的三種方式比較
代碼片段和文件信息
#include
#include?“stdafx.h“
#ifdef?_DEBUG
#define?new?DEBUG_NEW
#undef?THIS_FILE
static?char?THIS_FILE[]?=?__FILE__;
#endif
DWORD?BufferSize=1024;
char?buf[1024];
CWinApp?theApp;
using?namespace?std;
//函數聲明
void?FileReadWrite_NoBuffer(char*?sourcechar*?destination);//無緩沖方式實現文件讀寫
void?FileReadWrite_FastBuffer(char*?sourcechar*?destination);//高速緩存方式實現文件讀寫
void?FileReadWrite_Asyn(char*?sourcechar*?destination);//異步方式實現文件讀寫
int?_tmain(int?argc?TCHAR*?argv[]?TCHAR*?envp[])
{
int?nRetCode?=?0;
????DWORD?ticktick_s;
DWORD?nobuffer_start_timesequential_start_timeoverlapped_start_time;
DWORD?nobuffer_end_timesequential_end_timeoverlapped_end_time;
DWORD?nobuffer_average_time=0;
DWORD?sequential_average_time=0;
DWORD?overlapped_average_time=0;
printf(“無緩沖方式運行中...\n“);
nobuffer_start_time=GetTickCount();
for?(int?i=0;i<10;i++)
{
tick=GetTickCount();
FileReadWrite_NoBuffer(“source.txt““1_nobuffer.txt“);
printf(“無緩沖方式:?%d?%d?ms\n“iGetTickCount()-tick);
}
nobuffer_end_time=GetTickCount();
printf(“\n高速緩存方式運行中...\n“);
????sequential_start_time=GetTickCount();
for?(i=0;i<10;i++)
{
tick_s=GetTickCount();
FileReadWrite_FastBuffer(“source.txt““2_FastBuffer.txt“);
printf(“高速緩存方式:?%d?%d?ms\n“iGetTickCount()-tick_s);
}
sequential_end_time=GetTickCount();
printf(“\n異步方式運行中...\n“);
overlapped_start_time=GetTickCount();
for?(i=0;i<10;i++)
{
tick=GetTickCount();
FileReadWrite_Asyn(“source.txt““3_Asyn.txt“);
printf(“異步方式:?%d?%d?ms\n“iGetTickCount()-tick);
}
overlapped_end_time=GetTickCount();
printf(“\n“);
printf(“\n最終結果:\n“);
printf(“1.無緩沖方式實現文件讀寫:?%d?ms\n“(nobuffer_end_time-nobuffer_start_time)/10);
printf(“2.高速緩存方式實現文件讀寫:?%d?ms\n“(sequential_end_time-sequential_start_time)/10);
printf(“3.異步方式實現文件讀寫:?%d?ms\n“(overlapped_end_time-overlapped_start_time)/10);
return?nRetCode;
}
//無緩沖方式實現文件讀寫
void?FileReadWrite_NoBuffer(char*?sourcechar*?destination){
HANDLE?handle_srchandle_dst;
DWORD?NumberOfByteReadNumberOfByteWrite;
BOOL?cycle;
char?*buffer;
buffer=buf;
handle_src=CreateFile(sourceGENERIC_READ0NULLOPEN_ALWAYSFILE_FLAG_NO_BUFFERINGNULL);
handle_dst=CreateFile(destinationGENERIC_WRITENULLNULLCREATE_ALWAYSNULLNULL);
if(handle_src==INVALID_HANDLE_VALUE||handle_dst==INVALID_HANDLE_VALUE){
printf(“File?Create?Fail!\n“);
exit(1);
}
cycle=TRUE;
while(cycle){
NumberOfByteRead=BufferSize;
if(!ReadFile(handle_srcbufferNumberOfByteRead&NumberOfByteReadNULL)){
printf(“Read?File?Error!%d\n“GetLastError());
exit(1);
}
if(Numb
- 上一篇:行人檢測 opencv
- 下一篇:FFT算法的C語言實現可以直接用在單片機中
評論
共有 條評論