📄 fileop.c
字号:
for(j=0;j<x;j++) { sprintf(buf,"iozone_L1_%d_L2_%d",i,j); chdir(buf); dirbuf=opendir("."); if(dirbuf==0) { printf("opendir failed\n"); exit(1); } stats[_STAT_READDIR].starttime=time_so_far(); y=readdir(dirbuf); if(y == 0) { printf("readdir failed\n"); exit(1); } stats[_STAT_READDIR].endtime=time_so_far(); stats[_STAT_READDIR].speed=stats[_STAT_READDIR].endtime-stats[_STAT_READDIR].starttime; if(stats[_STAT_READDIR].speed < (double)0.0) stats[_STAT_READDIR].speed=(double)0.0; stats[_STAT_READDIR].total_time+=stats[_STAT_READDIR].speed; stats[_STAT_READDIR].counter++; if(stats[_STAT_READDIR].speed < stats[_STAT_READDIR].best) stats[_STAT_READDIR].best=stats[_STAT_READDIR].speed; if(stats[_STAT_READDIR].speed > stats[_STAT_READDIR].worst) stats[_STAT_READDIR].worst=stats[_STAT_READDIR].speed; ret1=closedir(dirbuf); if(ret1 < 0) { printf("closedir failed\n"); exit(1); } chdir(".."); } chdir(".."); }}void file_link(int x){ int i,j,k,y; char buf[100]; char bufn[100]; stats[_STAT_LINK].best=(double)999999.9; stats[_STAT_LINK].worst=(double)0.0; for(i=0;i<x;i++) { sprintf(buf,"iozone_L1_%d",i); chdir(buf); for(j=0;j<x;j++) { sprintf(buf,"iozone_L1_%d_L2_%d",i,j); chdir(buf); for(k=0;k<x;k++) { sprintf(buf,"iozone_file_%d_%d_%d",i,j,k); sprintf(bufn,"iozone_file_%d_%d_%dL",i,j,k); stats[_STAT_LINK].starttime=time_so_far(); y=link(buf,bufn); if(y < 0) { printf("Link failed\n"); exit(1); } stats[_STAT_LINK].endtime=time_so_far(); stats[_STAT_LINK].speed=stats[_STAT_LINK].endtime-stats[_STAT_LINK].starttime; if(stats[_STAT_LINK].speed < (double)0.0) stats[_STAT_LINK].speed=(double)0.0; stats[_STAT_LINK].total_time+=stats[_STAT_LINK].speed; stats[_STAT_LINK].counter++; if(stats[_STAT_LINK].speed < stats[_STAT_LINK].best) stats[_STAT_LINK].best=stats[_STAT_LINK].speed; if(stats[_STAT_LINK].speed > stats[_STAT_LINK].worst) stats[_STAT_LINK].worst=stats[_STAT_LINK].speed; } chdir(".."); } chdir(".."); }}void file_unlink(int x){ int i,j,k,y; char buf[100]; char bufn[100]; stats[_STAT_UNLINK].best=(double)999999.9; stats[_STAT_UNLINK].worst=(double)0.0; for(i=0;i<x;i++) { sprintf(buf,"iozone_L1_%d",i); chdir(buf); for(j=0;j<x;j++) { sprintf(buf,"iozone_L1_%d_L2_%d",i,j); chdir(buf); for(k=0;k<x;k++) { sprintf(buf,"iozone_file_%d_%d_%d",i,j,k); sprintf(bufn,"iozone_file_%d_%d_%dL",i,j,k); stats[_STAT_UNLINK].starttime=time_so_far(); y=unlink(bufn); if(y < 0) { printf("Unlink failed\n"); exit(1); } stats[_STAT_UNLINK].endtime=time_so_far(); stats[_STAT_UNLINK].speed=stats[_STAT_UNLINK].endtime-stats[_STAT_UNLINK].starttime; if(stats[_STAT_UNLINK].speed < (double)0.0) stats[_STAT_UNLINK].speed=(double)0.0; stats[_STAT_UNLINK].total_time+=stats[_STAT_UNLINK].speed; stats[_STAT_UNLINK].counter++; if(stats[_STAT_UNLINK].speed < stats[_STAT_UNLINK].best) stats[_STAT_UNLINK].best=stats[_STAT_UNLINK].speed; if(stats[_STAT_UNLINK].speed > stats[_STAT_UNLINK].worst) stats[_STAT_UNLINK].worst=stats[_STAT_UNLINK].speed; } chdir(".."); } chdir(".."); }}voiddir_delete(int x){ int i,j; char buf[100]; stats[_STAT_DIR_DELETE].best=(double)99999.9; stats[_STAT_DIR_DELETE].worst=(double)0.00000000; for(i=0;i<x;i++) { sprintf(buf,"iozone_L1_%d",i); chdir(buf); for(j=0;j<x;j++) { sprintf(buf,"iozone_L1_%d_L2_%d",i,j); chdir(buf); chdir(".."); sprintf(buf,"iozone_L1_%d_L2_%d",i,j); stats[_STAT_DIR_DELETE].starttime=time_so_far(); rmdir(buf); stats[_STAT_DIR_DELETE].endtime=time_so_far(); stats[_STAT_DIR_DELETE].speed=stats[_STAT_DIR_DELETE].endtime-stats[_STAT_DIR_DELETE].starttime; if(stats[_STAT_DIR_DELETE].speed < (double)0.0) stats[_STAT_DIR_DELETE].speed=(double)0.0; stats[_STAT_DIR_DELETE].total_time+=stats[_STAT_DIR_DELETE].speed; stats[_STAT_DIR_DELETE].counter++; if(stats[_STAT_DIR_DELETE].speed < stats[_STAT_DIR_DELETE].best) stats[_STAT_DIR_DELETE].best=stats[_STAT_DIR_DELETE].speed; if(stats[_STAT_DIR_DELETE].speed > stats[_STAT_DIR_DELETE].worst) stats[_STAT_DIR_DELETE].worst=stats[_STAT_DIR_DELETE].speed; } chdir(".."); sprintf(buf,"iozone_L1_%d",i); stats[_STAT_DIR_DELETE].starttime=time_so_far(); rmdir(buf); stats[_STAT_DIR_DELETE].endtime=time_so_far(); stats[_STAT_DIR_DELETE].speed=stats[_STAT_DIR_DELETE].endtime-stats[_STAT_DIR_DELETE].starttime; if(stats[_STAT_DIR_DELETE].speed < (double)0.0) stats[_STAT_DIR_DELETE].speed=(double)0.0; stats[_STAT_DIR_DELETE].total_time+=stats[_STAT_DIR_DELETE].speed; stats[_STAT_DIR_DELETE].counter++; if(stats[_STAT_DIR_DELETE].speed < stats[_STAT_DIR_DELETE].best) stats[_STAT_DIR_DELETE].best=stats[_STAT_DIR_DELETE].speed; if(stats[_STAT_DIR_DELETE].speed > stats[_STAT_DIR_DELETE].worst) stats[_STAT_DIR_DELETE].worst=stats[_STAT_DIR_DELETE].speed; }}voidfile_delete(int x){ int i,j,k; char buf[100]; stats[_STAT_DELETE].best=(double)999999.9; stats[_STAT_DELETE].worst=(double)0.0; for(i=0;i<x;i++) { sprintf(buf,"iozone_L1_%d",i); chdir(buf); for(j=0;j<x;j++) { sprintf(buf,"iozone_L1_%d_L2_%d",i,j); chdir(buf); for(k=0;k<x;k++) { sprintf(buf,"iozone_file_%d_%d_%d",i,j,k); stats[_STAT_DELETE].starttime=time_so_far(); unlink(buf); stats[_STAT_DELETE].endtime=time_so_far(); stats[_STAT_DELETE].speed=stats[_STAT_DELETE].endtime-stats[_STAT_DELETE].starttime; if(stats[_STAT_DELETE].speed < (double)0.0) stats[_STAT_DELETE].speed=(double)0.0; stats[_STAT_DELETE].total_time+=stats[_STAT_DELETE].speed; stats[_STAT_DELETE].counter++; if(stats[_STAT_DELETE].speed < stats[_STAT_DELETE].best) stats[_STAT_DELETE].best=stats[_STAT_DELETE].speed; if(stats[_STAT_DELETE].speed > stats[_STAT_DELETE].worst) stats[_STAT_DELETE].worst=stats[_STAT_DELETE].speed; } chdir(".."); sprintf(buf,"iozone_L1_%d_L2_%d",i,j); rmdir(buf); } chdir(".."); sprintf(buf,"iozone_L1_%d",i); rmdir(buf); }}void file_read(int x){ int i,j,k,y,fd; char buf[100]; char value; stats[_STAT_READ].best=(double)99999.9; stats[_STAT_READ].worst=(double)0.00000000; for(i=0;i<x;i++) { sprintf(buf,"iozone_L1_%d",i); chdir(buf); for(j=0;j<x;j++) { sprintf(buf,"iozone_L1_%d_L2_%d",i,j); chdir(buf); for(k=0;k<x;k++) { sprintf(buf,"iozone_file_%d_%d_%d",i,j,k); value=(char)((i^j^k) &0xff); fd=open(buf,O_RDONLY); if(fd < 0) { printf("Open failed\n"); exit(1); } stats[_STAT_READ].starttime=time_so_far(); y=read(fd,mbuffer,sz); if(y < 0) { printf("Read failed\n"); exit(1); } if(validate(mbuffer,sz, value) !=0) printf("Error: Data Mis-compare\n");; stats[_STAT_READ].endtime=time_so_far(); close(fd); stats[_STAT_READ].speed=stats[_STAT_READ].endtime-stats[_STAT_READ].starttime; if(stats[_STAT_READ].speed < (double)0.0) stats[_STAT_READ].speed=(double)0.0; stats[_STAT_READ].total_time+=stats[_STAT_READ].speed; stats[_STAT_READ].counter++; if(stats[_STAT_READ].speed < stats[_STAT_READ].best) stats[_STAT_READ].best=stats[_STAT_READ].speed; if(stats[_STAT_READ].speed > stats[_STAT_READ].worst) stats[_STAT_READ].worst=stats[_STAT_READ].speed; } chdir(".."); } chdir(".."); }}/************************************************************************//* Time measurement routines. Thanks to Iozone :-) *//************************************************************************/#ifdef HAVE_ANSIC_Cstatic doubletime_so_far(void)#elsestatic doubletime_so_far()#endif{#ifdef Windows LARGE_INTEGER freq,counter; double wintime,bigcounter; /* For Windows the time_of_day() is useless. It increments in 55 milli second */ /* increments. By using the Win32api one can get access to the high performance */ /* measurement interfaces. With this one can get back into the 8 to 9 */ /* microsecond resolution. */ QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&counter); bigcounter=(double)counter.HighPart *(double)0xffffffff + (double)counter.LowPart; wintime = (double)(bigcounter/(double)freq.LowPart); return((double)wintime);#else#if defined (OSFV4) || defined(OSFV3) || defined(OSFV5) struct timespec gp; if (getclock(TIMEOFDAY, (struct timespec *) &gp) == -1) perror("getclock"); return (( (double) (gp.tv_sec)) + ( ((float)(gp.tv_nsec)) * 0.000000001 ));#else struct timeval tp; if (gettimeofday(&tp, (struct timezone *) NULL) == -1) perror("gettimeofday"); return ((double) (tp.tv_sec)) + (((double) tp.tv_usec) * 0.000001 );#endif#endif}voidsplash(void){ printf("\n"); printf(" --------------------------------------\n"); printf(" | Fileop | \n"); printf(" | %s | \n",version); printf(" | | \n"); printf(" | by |\n"); printf(" | | \n"); printf(" | Don Capps |\n"); printf(" --------------------------------------\n"); printf("\n");}void usage(void){ splash(); printf(" fileop [-f X ]|[-l # -u #] [-s Y] [-t] [-v] [-e] [-b] -[w]\n"); printf("\n"); printf(" -f # Force factor. X^3 files will be created and removed.\n"); printf(" -l # Lower limit on the value of the Force factor.\n"); printf(" -u # Upper limit on the value of the Force factor.\n"); printf(" -s # Optional. Sets filesize for the create/write.\n"); printf(" -t # Verbose output option.\n"); printf(" -v # Version information.\n"); printf(" -e # Excel importable format.\n"); printf(" -b Output best case results\n"); printf(" -w Output worst case results\n"); printf("\n"); printf(" The structure of the file tree is:\n"); printf(" X number of Level 1 directorys, with X number of\n"); printf(" level 2 directories, with X number of files in each\n"); printf(" of the level 2 directories.\n"); printf("\n"); printf(" Example: fileop 2\n"); printf("\n"); printf(" dir_1 dir_2\n"); printf(" / \\ / \\ \n"); printf(" sdir_1 sdir_2 sdir_1 sdir_2\n"); printf(" / \\ / \\ / \\ / \\ \n"); printf(" file_1 file_2 file_1 file_2 file_1 file_2 file_1 file_2\n"); printf("\n"); printf(" Each file will be created, and then Y bytes is written to the file.\n"); printf("\n");}voidclear_stats(){ int i; for(i=0;i<_NUM_STATS;i++) bzero((char *)&stats[i],sizeof(struct stat_struct));}intvalidate(char *buffer, int size, char value){ register int i; register char *cp; register int size1; register char v1; v1=value; cp = buffer; size1=size; for(i=0;i<size;i++) { if(*cp++ != v1) return(1); } return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -