comparison c/read_lseek/read_lseek.cc @ 3:cd6ac4ce5c3c

add some files
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Wed, 11 Dec 2013 02:40:58 +0900
parents
children
comparison
equal deleted inserted replaced
2:c1968e54b0da 3:cd6ac4ce5c3c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <fcntl.h>
5 #include <string.h>
6 #include <stdbool.h>
7 #include <sys/stat.h>
8 #include <sys/time.h>
9 #include <sys/types.h>
10 #include "read.h"
11
12 static double st_time;
13 static double ed_time;
14
15 /*
16 * -b : bulk read 一括read
17 * -d : divide read 分割read (default)
18 */
19 const char *usr_help_str = "Usage : ./read_lseek [-file filename] [-b -d]";
20 const int ONE_TASK_READ_SIZE = 4096 * 1;
21 bool bulk_flag = true;
22 bool divide_flag = false;
23
24 void result_printf(int,char *);
25 void divide_read(int,char*,read_t);
26 void bulk_read(int,char*,read_t);
27
28 static double
29 get_time(){
30 struct timeval tv;
31 gettimeofday(&tv,NULL);
32 return tv.tv_sec + (double)tv.tv_usec*1e-6;
33 }
34
35 int main(int argc, char *argv[]){
36
37 struct stat sb;
38 read_t r;
39
40 char *filename = 0;
41 for (int i = 1; argv[i]; ++i) {
42 if (strcmp(argv[i], "-file") == 0){
43 filename = argv[i+1];
44 }else if(strcmp(argv[i], "-b") == 0){
45 bulk_flag = true;
46 divide_flag = false;
47 }else if(strcmp(argv[i], "-d") == 0){
48 bulk_flag = false;
49 divide_flag = true;
50 }
51 }
52
53 if (filename == 0){
54 puts(usr_help_str);
55 exit(1);
56 }
57
58 st_time = get_time();
59
60 int fd = -1;
61 if ((fd=open(filename,O_RDONLY,0666))==0){
62 fprintf(stderr,"can't open %s\n",filename);
63 }
64
65 if (fstat(fd,&sb)){
66 fprintf(stderr,"can't open %s\n",filename);
67 }
68
69 r.text_size = sb.st_size;
70 char *text = (char *)malloc(sizeof(char)*r.text_size);
71
72 r.one_task_read_size = ONE_TASK_READ_SIZE;
73
74 r.task_num = r.text_size / r.one_task_read_size;
75 r.task_num += ((r.text_size % r.one_task_read_size) != 0);
76
77 if(bulk_flag == true){
78 bulk_read(fd,text,r);
79 }else if(divide_flag == true){
80 divide_read(fd,text,r);
81 }
82
83 free(text);
84 close(fd);
85
86 ed_time = get_time();
87 printf("Time: %0.6f\n",ed_time-st_time);
88
89 return 0;
90 }
91
92 void divide_read(int _fd,char* _text,read_t _r){
93 for(int i = 0; i < _r.task_num; i++){
94 lseek(_fd, i * _r.one_task_read_size,SEEK_SET);
95 read(_fd,_text,_r.one_task_read_size);
96 result_printf(i,_text);
97 }
98 puts("divide read");
99 printf("text size :%lu\n",_r.text_size);
100 printf("one task size:%d\n",_r.one_task_read_size);
101 printf("task num :%d\n",_r.task_num);
102 }
103
104 void bulk_read(int _fd,char* _text,read_t _r){
105 int i = 0;
106 read(_fd,_text,_r.text_size);
107 result_printf(i,_text);
108 puts("bulk read");
109 printf("text size :%lu\n",_r.text_size);
110 }
111
112 void result_printf(int _i,char *_text){
113 //printf("-------%d--------\n",_i + 1);
114 printf("[task No. %d]%s\n",_i,_text);
115 //printf("-----------------\n\n");
116 }