large file storage WIP. Can save and verify a large file under yaffs direct.
[yaffs2.git] / linux-tests / writebigsparse.c
1 #define _LARGEFILE64_SOURCE
2 #include<stdio.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <fcntl.h>
6 #include <unistd.h>
7 #include <stdlib.h>
8
9 int handle;
10
11 #define N_WRITES 8000
12 #define STRIDE   1000
13
14 #define BUFFER_N 2000
15 unsigned  buffer[BUFFER_N];
16
17
18 void set_buffer(int n)
19 {
20         int i;
21         for(i = 0; i < BUFFER_N; i++)
22                 buffer[i] = i + n;
23 }
24
25 void write_big_sparse_file(int h)
26 {
27         int i;
28         off64_t offset = 0;
29         off64_t pos;
30         int n = sizeof(buffer);
31         int wrote;
32         
33         for(i = 0; i < 4000; i++) {
34                 set_buffer(i);
35                 pos = lseek64(h, offset, SEEK_SET);
36                 if(pos != offset) {
37                         printf("mismatched seek pos %lld offset %lld\n",
38                                 pos, offset);
39                         perror("lseek64");
40                         exit(1);
41                 }
42                 wrote = write(h, buffer, n);
43                 
44                 if(wrote != n) {
45                         printf("mismatched write wrote %d n %d\n", wrote, n);
46                         exit(1);
47                 }
48                 
49                 offset += (STRIDE * sizeof(buffer));
50         }
51 }
52
53
54
55
56 void verify_big_sparse_file(int h)
57 {
58 }
59
60 int main(int argc, char *argv[])
61 {
62
63         if(argc < 2) {
64                 printf("Gimme a file name!\n");
65                 exit(1);
66         }
67         
68         handle = open(argv[1], O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
69         
70         if(handle < 0) {
71                 perror("opening file");
72                 exit(1);
73         }
74         
75         write_big_sparse_file(handle);
76         system("sudo echo 3 > /proc/sys/vm/drop_caches");
77         verify_big_sparse_file(handle);
78         
79         printf("Job done\n");
80         return 0;
81 }