Mercurial > hg > Applications > Grep
view c/read_lseek/main.cc @ 116:66c633575b53 pairPro
remove error and warning
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 24 Nov 2015 17:07:08 +0900 |
parents | 57b2c00b9dc6 |
children |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <stdbool.h> #include <sys/stat.h> #include <sys/time.h> #include <sys/types.h> #include "read.h" static double st_time; static double ed_time; /* * -b : bulk read 一括read * -d : divide read 分割read (default) */ const char *usr_help_str = "Usage : ./read_lseek [-file filename] [-b -d]"; const int ONE_TASK_READ_SIZE = 4096 * 1; bool bulk_flag = true; bool divide_flag = false; void result_printf(int,char *); void divide_read(int,char*,read_t); void bulk_read(int,char*,read_t); static double get_time(){ struct timeval tv; gettimeofday(&tv,NULL); return tv.tv_sec + (double)tv.tv_usec*1e-6; } int main(int argc, char *argv[]){ struct stat sb; read_t r; char *filename = 0; for (int i = 1; argv[i]; ++i) { if (strcmp(argv[i], "-file") == 0){ filename = argv[i+1]; }else if(strcmp(argv[i], "-b") == 0){ bulk_flag = true; divide_flag = false; }else if(strcmp(argv[i], "-d") == 0){ bulk_flag = false; divide_flag = true; } } if (filename == 0){ puts(usr_help_str); exit(1); } st_time = get_time(); int fd = -1; if ((fd=open(filename,O_RDONLY,0666))==0){ fprintf(stderr,"can't open %s\n",filename); } if (fstat(fd,&sb)){ fprintf(stderr,"can't open %s\n",filename); } r.text_size = sb.st_size; char *text = (char *)malloc(sizeof(char)*r.text_size); r.one_task_read_size = ONE_TASK_READ_SIZE; r.task_num = r.text_size / r.one_task_read_size; r.task_num += ((r.text_size % r.one_task_read_size) != 0); if(bulk_flag == true){ bulk_read(fd,text,r); }else if(divide_flag == true){ divide_read(fd,text,r); } free(text); close(fd); ed_time = get_time(); printf("Time: %0.6f\n",ed_time-st_time); return 0; } /* lseekで読む場所を指定してあげないといけないと思ったが、 * readで読み込むだけでも読み込む場所が変わってくれるらしい。 */ void divide_read(int _fd,char* _text,read_t _r){ for(int i = 0; i < _r.task_num; i++){ //lseek(_fd, i * _r.one_task_read_size,SEEK_SET); read(_fd,_text,_r.one_task_read_size); result_printf(i,_text); } puts("divide read"); printf("text size :%lu\n",_r.text_size); printf("one task size:%d\n",_r.one_task_read_size); printf("task num :%d\n",_r.task_num); } void bulk_read(int _fd,char* _text,read_t _r){ int i = 0; read(_fd,_text,_r.text_size); result_printf(i,_text); puts("bulk read"); printf("text size :%lu\n",_r.text_size); } void result_printf(int _i,char *_text){ //printf("-------%d--------\n",_i + 1); printf("[task No. %d]%s\n",_i,_text); //printf("-----------------\n\n"); }