annotate c/mmap/main.cc @ 26:0f4ccdbaf57f

add mmap
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Sun, 11 May 2014 03:49:24 +0900
parents c/read_lseek/main.cc@57b2c00b9dc6
children 178cf2dfc45b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <stdio.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include <stdlib.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include <unistd.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include <fcntl.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 #include <string.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include <stdbool.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 #include <sys/stat.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 #include <sys/time.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 #include <sys/types.h>
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 #include "read.h"
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 static double st_time;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 static double ed_time;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 /*
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 * -b : bulk read 一括read
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 * -d : divide read 分割read (default)
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 */
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 const char *usr_help_str = "Usage : ./read_lseek [-file filename] [-b -d]";
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 const int ONE_TASK_READ_SIZE = 4096 * 1;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 bool bulk_flag = true;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 bool divide_flag = false;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 void result_printf(int,char *);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 void divide_read(int,char*,read_t);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 void bulk_read(int,char*,read_t);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 static double
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 get_time(){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 struct timeval tv;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 gettimeofday(&tv,NULL);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 return tv.tv_sec + (double)tv.tv_usec*1e-6;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 int main(int argc, char *argv[]){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 struct stat sb;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 read_t r;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 char *filename = 0;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 for (int i = 1; argv[i]; ++i) {
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 if (strcmp(argv[i], "-file") == 0){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 filename = argv[i+1];
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 }else if(strcmp(argv[i], "-b") == 0){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 bulk_flag = true;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 divide_flag = false;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 }else if(strcmp(argv[i], "-d") == 0){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 bulk_flag = false;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 divide_flag = true;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 if (filename == 0){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 puts(usr_help_str);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 exit(1);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 st_time = get_time();
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 int fd = -1;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 if ((fd=open(filename,O_RDONLY,0666))==0){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 fprintf(stderr,"can't open %s\n",filename);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 if (fstat(fd,&sb)){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 fprintf(stderr,"can't open %s\n",filename);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 r.text_size = sb.st_size;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 char *text = (char *)malloc(sizeof(char)*r.text_size);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 r.one_task_read_size = ONE_TASK_READ_SIZE;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 r.task_num = r.text_size / r.one_task_read_size;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 r.task_num += ((r.text_size % r.one_task_read_size) != 0);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 if(bulk_flag == true){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 bulk_read(fd,text,r);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 }else if(divide_flag == true){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 divide_read(fd,text,r);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 free(text);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 close(fd);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 ed_time = get_time();
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 printf("Time: %0.6f\n",ed_time-st_time);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 return 0;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91
4
57b2c00b9dc6 file rename read_lseek.cc to main.cc
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
92 /* lseekで読む場所を指定してあげないといけないと思ったが、
57b2c00b9dc6 file rename read_lseek.cc to main.cc
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
93 * readで読み込むだけでも読み込む場所が変わってくれるらしい。
57b2c00b9dc6 file rename read_lseek.cc to main.cc
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
94 */
3
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 void divide_read(int _fd,char* _text,read_t _r){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 for(int i = 0; i < _r.task_num; i++){
4
57b2c00b9dc6 file rename read_lseek.cc to main.cc
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
97 //lseek(_fd, i * _r.one_task_read_size,SEEK_SET);
3
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 read(_fd,_text,_r.one_task_read_size);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 result_printf(i,_text);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 puts("divide read");
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 printf("text size :%lu\n",_r.text_size);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 printf("one task size:%d\n",_r.one_task_read_size);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 printf("task num :%d\n",_r.task_num);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 void bulk_read(int _fd,char* _text,read_t _r){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 int i = 0;
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 read(_fd,_text,_r.text_size);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 result_printf(i,_text);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 puts("bulk read");
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 printf("text size :%lu\n",_r.text_size);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 }
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 void result_printf(int _i,char *_text){
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 //printf("-------%d--------\n",_i + 1);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 printf("[task No. %d]%s\n",_i,_text);
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 //printf("-----------------\n\n");
cd6ac4ce5c3c add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 }