📄 massperf.cpp
字号:
#include "windows.h"
#include "stdio.h"
static void MakeMassStoragePerformace( TCHAR * csSrc, TCHAR* csDst, DWORD dwBufSize );
int _tmain(int argc, TCHAR *argv[], TCHAR *envp[])
{
DWORD dwPort=-1;
BOOL bReboot=FALSE;
TCHAR csSrc[MAX_PATH]=L"";
TCHAR csDst[MAX_PATH]=L"";
#define FLAG_SOURCE 10
#define FLAG_DEST 11
#define FLAG_NULL 0
DWORD dwFlag=FLAG_NULL;
DWORD dwBufSize=128;
argv++; // the first parameter is the name of the program.
argc--;
while(1)
{
if(argc == 0)
{
break;
}
if( (argv[0][0] == '-') ){
if(argv[0][1] =='s')
{
dwFlag=FLAG_SOURCE;
}
else if(argv[0][1] =='d')
{
dwFlag=FLAG_DEST;
}
else if(argv[0][1] =='b')
{
dwBufSize=_wtol(argv[0] + 2);
}
else if(argv[0][1] == 'h')
{
//Usage();
wprintf(L"Usage:\r\n");
wprintf(L"\t-s source file name\r\n");
wprintf(L"\t-d destination file name\r\n");
wprintf(L"\t-b Buffer size in KB\r\n");
return(1);
}
}else{
if( dwFlag==FLAG_SOURCE ){
wcscat(csSrc, argv[0]);
wcscat(csSrc, L" ");
}else if(dwFlag==FLAG_DEST){
wcscat(csDst, argv[0]);
wcscat(csDst, L" ");
}
}
//
// Skip to the next argument on the command line.
//
argv++;
argc--;
}
if( wcslen(csSrc) && wcslen(csDst ) ){
csSrc[wcslen(csSrc)-1]=0;
csDst[wcslen(csDst)-1]=0;
MakeMassStoragePerformace( csSrc, csDst , dwBufSize );
}else{
wprintf(L"Please give the source& destination file name\r\n");
}
return 0;
}
void MakeMassStoragePerformace( TCHAR * csSrc, TCHAR* csDst, DWORD dwBufSize )
{
HANDLE hSrc, hDst;
DWORD dwRead;
PCHAR pBuffer=NULL;
DWORD dwStart, dwIdleStart;
DWORD dwEnd, dwIdleEnd;
DWORD dwWrite;
DWORD dwAvCount=0, dwAvIdle=0;
if( dwBufSize >4096 )
dwBufSize=4096;
if( dwBufSize <16 )
dwBufSize=16;
dwBufSize*=1024;
RETAILMSG(1,(L"Source %s, Dest %s\r\n", csSrc, csDst));
pBuffer=(PCHAR)LocalAlloc(LPTR,dwBufSize);
if(!pBuffer){
printf("Can't get memory, stop\r\n");
return;
}
hSrc=CreateFile(csSrc, GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
hDst=CreateFile(csDst, GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if( hSrc ==INVALID_HANDLE_VALUE ||
hDst ==INVALID_HANDLE_VALUE ){
goto Failed_Stop;
}
while( 1 ){
dwStart=GetTickCount();
dwIdleStart=GetIdleTime( );
if(ReadFile(hSrc,pBuffer,dwBufSize,&dwRead,NULL) ){
if(!WriteFile(hDst,pBuffer,dwRead,&dwWrite,NULL) ){
printf("Write failed,stop\r\n"); //maybe the disk is full.
break;
}
}else{
break;
}
if(!dwRead)
break;
dwEnd=GetTickCount( )-dwStart;
dwIdleEnd=GetIdleTime( )-dwIdleStart;
dwAvCount+=dwEnd;
dwAvIdle+=dwIdleEnd;
printf("%dK/s,CPU usage %d%%\r",dwRead/dwEnd, (dwEnd-dwIdleEnd)*100/dwEnd);
}
printf("\r\naverage: %dK/s,CPU usage %d%%\r\n",
GetFileSize(hSrc,NULL)/dwAvCount,
(dwAvCount-dwAvIdle)*100/dwAvCount);
Failed_Stop:
if(pBuffer)
LocalFree( pBuffer );
if( hSrc)
CloseHandle(hSrc);
if( hDst)
CloseHandle(hDst);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -