⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timewrite.c

📁 unix环境下write函数同步和异步读写效率的比较
💻 C
字号:
#include "ourhdr.h"#include <string.h>#include <sys/times.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#define MAXBUFSIZE 128*1024
int main(int argc,char *argv[]){	int count,n;	int fd;	char buf[MAXBUFSIZE];	size_t bufsize;	struct tms start_t,end_t;    //起始的相对时间	clock_t start,end,utsum,stsum,ctsum;	float clktck,ut,st,ct;	if(argc<2){		err_sys("usage:boject file needed!\n");		exit(0);	}	else if(argc==2){                //异步		if((fd=open(argv[1],O_WRONLY|O_CREAT))<0){			err_sys("open error\n");			exit(1);		}
	}
	else if(argc==3){              //同步
		if(!strcmp(argv[2],"sync")){
			if((fd=open(argv[1],O_WRONLY|O_SYNC|O_CREAT))<0){//同步写入
				err_sys("open error\n");
				exit(1);
			}
		}
		else{
			err_sys("argument 2 ERROR!\n");
			exit(0);
		}
	}
	else{
		err_sys("too many argument!\n");
		exit(0);
	}
	clktck=(float)sysconf(_SC_CLK_TCK);  //所运行系统每秒的滴答数,用于计算时间
	printf("\nBUFFSIZE	USER	SYSTEM	CLOCK	REPEAT\n");
	for(bufsize=1024;bufsize<=MAXBUFSIZE;bufsize*=2){
		count=0;
		utsum=0;
		stsum=0;
		ctsum=0;
		lseek(STDIN_FILENO,0,SEEK_SET);
		while((n=read(STDIN_FILENO,buf,bufsize))>0)
		{
			count++;
			start=times(&start_t);
			if((write(fd,buf,n))<0) printf("write error");
			end=times(&end_t);
			utsum+=(end_t.tms_utime-start_t.tms_utime)+(end_t.tms_cutime-start_t.tms_cutime);
			stsum+=(end_t.tms_stime-start_t.tms_stime)+(end_t.tms_cstime-start_t.tms_cstime);
			ctsum+=end-start;
		}
		if(n<0) printf("read error");
		ut=utsum/clktck;
		st=stsum/clktck;
		ct=ctsum/clktck;
		fprintf(stderr,"%8lu	%7.2f	%7.2f	%7.2f	%8d\n",bufsize,ut,st,ct,count);
	   }
	   exit(0);
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -