diff example/fileread/main.cc @ 1985:d703157bb280 draft

add Read mode in fileread
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Fri, 18 Apr 2014 00:24:16 +0900
parents 7bea670cdba0
children
line wrap: on
line diff
--- a/example/fileread/main.cc	Thu Apr 17 23:43:09 2014 +0900
+++ b/example/fileread/main.cc	Fri Apr 18 00:24:16 2014 +0900
@@ -101,6 +101,10 @@
             filename = argv[i+1];
         } else if (strcmp(argv[i], "-br") == 0) {
             READ_TYPE = BLOCKED_READ;
+        } else if (strcmp(argv[i], "-r") == 0) {
+            READ_TYPE = MY_READ;
+        } else if (strcmp(argv[i], "-m") == 0) {
+            READ_TYPE = MY_MMAP;
         }
     }
 
@@ -122,13 +126,9 @@
     FileReadPtr fr = (FileReadPtr)in;
     /*マッピングだよ!*/
 
-    int map = MAP_PRIVATE;
-    st_mmap_t st_mmap;
-
     int fd = fr->fd;
-    st_mmap.size = fr->filesize;
-    fr->read_text = (char*)mmap(NULL,st_mmap.size,PROT_READ,map,fd,(off_t)0);
-    if (st_mmap.file_mmap == (caddr_t)-1) {
+    read(fd, fr->read_text, fr->filesize);
+    if (fr->read_text == (caddr_t)-1) {
         fprintf(stderr,"Can't mmap file\n");
 
         perror(NULL);
@@ -139,6 +139,29 @@
 }
 
 
+SchedDefineTask1(READ,my_read);
+
+static int
+my_read(SchedTask *s, void *in, void *out)
+{
+
+    FileReadPtr fr = (FileReadPtr)in;
+    /*マッピングだよ!*/
+
+    int map = MAP_PRIVATE;
+
+    int fd = fr->fd;
+    fr->read_text = (char*)mmap(NULL,fr->filesize,PROT_READ,map,fd,(off_t)0);
+    if (fr->read_text == (caddr_t)-1) {
+        fprintf(stderr,"Can't mmap file\n");
+
+        perror(NULL);
+        exit(0);
+    }
+
+    return 0;
+}
+
 static void
 run_start(TaskManager *manager,char *filename)
 {
@@ -176,6 +199,9 @@
     if (READ_TYPE == MY_MMAP) {
         run = manager->create_task(MMAP , (memaddr)&fr->self, sizeof(memaddr),0,0);
         printf("+ in mmap mode +\n");
+    }else if (READ_TYPE == MY_READ) {
+        run = manager->create_task(READ , (memaddr)&fr->self, sizeof(memaddr),0,0);
+        printf("+ in Read mode +\n");
     }else {
         //my_mmap(filename, fd, fr);
         printf("+ in Blocked Read mode +\n");