MB를 3 매개 변수로 사용하고 처리 시간을 제공하는 프로그램을 작성했습니다.버퍼 NULL !: 메모리를 할당 할 수 없습니다.
int main(int argc,char* argv[]){
double kb = 0;
int time_taken = 0;
double throughput = 0;
int i = 0;
int w_rw = 0;
int fd = -1;
int bw = -1;
unsigned long long nob = 0;
char ip;
char* file_name = "myfile";
char* buff;
struct stat info;
struct timeval start_time,end_time;
int mb = 1024 * 1024;
/* Check the nos for W/RW and MBs*/
if(1 == argc){
printf("\n Missing 2 params R/RW & MB,Eg: execute ./a.out 2 100 \n");
return 1;
}
if(argc < 4){
w_rw = atoi(argv[1]);
if(w_rw > 2){
w_rw = 2;
}
nob = (atoi(argv[2]) * mb);
printf("\n W/RW : %d BYTES : %u \n",w_rw,nob);
}
else{
// Do Nothing
}
/* Allocate Buffer */
buff = (char *)malloc(nob * sizeof(char));
if(NULL == buff){
perror("Buffer NULL!");
return -1;
}
printf("\n File - Create,Open,Write,Close \n");
for(i = 0; i < w_rw; i++){
if(i == 0){
printf("\n --- Write IO Performance--- \n");
}
else{
printf("\n --- Re-write IO Performance--- \n");
printf("\n Press any char to continue : \n");
ip = getchar();
}
/* Open file*/
if((fd = open(file_name,O_CREAT | O_RDWR))< 0){
perror("Open failed!");
return -1;
}
/*Calculating the start and end time of write*/
gettimeofday(&start_time,NULL);
if((bw = write(fd,buff,nob)) < 0){
perror("Write failed!");
return -1;
}
gettimeofday(&end_time,NULL);
/*Calculating the throughput*/
time_taken = (end_time.tv_sec - start_time.tv_sec);
kb = bw/1024;
throughput = kb/time_taken;
/* Start */
if(-1 == stat(file_name,&info)){
perror("STAT Failed");
return -1;
}
printf("\n Inode no: %d \n Blocks : %d \n",info.st_ino,info.st_blocks);
printf("\n Start sec : %u \n",start_time.tv_sec);
printf("\n End sec : %u \n",end_time.tv_sec);
printf("\n Bytes written : %d bytes \n",bw);
printf("\n Time_taken : %d secs \n",time_taken);
printf("\n Throughput : %f kb/sec \n",throughput);
close(fd);
}
unlink(file_name);
return 0;
}
O/P :
[RW GFS @ 루트] # 2 ./a.out 76800
W/RW : 2 바이트 : 3221225472 버퍼는 NULL! :
메모리를 할당 할 수
은 시스템에 따라 다릅니다. –
할당과 관련이있는 경우에는 'size_t'를 사용하는 것이 더 좋습니다. –
또한'malloc'의 결과를 캐스팅하지 마십시오 : https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc –