00001 #include <stdio.h>
00002 #include <string.h>
00003 #include <stdlib.h>
00004 #include <sys/types.h>
00005 #include <sys/stat.h>
00006 #include <fcntl.h>
00007 #include <rts.h>
00008 #include "sfs_index.h"
00009 #include <SUNRT/clock.h>
00010
00011
00012 int main(int argc, char *argv[])
00013 {
00014 if(argc != 2) {
00015 printf("fs_ex filename\n");
00016 return 0;
00017 }
00018
00019 int fd = open(argv[1], O_RDONLY);
00020 if(fd < 0) {
00021 printf("Bad file...%s\n",argv[1]);
00022 }
00023
00024 printf("Sizeof inode=%d\n",sizeof(fs_inode));
00025 fs_index *idx;
00026
00027 char ff[4];
00028 read(fd, ff, 4);
00029 lseek(fd, 0, SEEK_SET);
00030
00031
00032
00033 printf("SFS format input file...\n");
00034
00035 idx = new sfs_index;
00036
00037
00038
00039
00040
00041
00042
00043 close(fd);
00044
00045
00046 double t;
00047 printf("Building index for file %s...\n",argv[1]);
00048 record_time();
00049 idx->mount(argv[1],O_RDONLY);
00050 t = record_time();
00051 printf("time to build index of %d inodes = %5.2lf seconds\n",idx->n_inodes,t);
00052
00053
00054
00055 fs_dir *dir = idx->opendir("/");
00056 if(!dir) {
00057 printf("Bad /\n");
00058 return 0;
00059 }
00060
00061 fs_dirent *entry;
00062
00063 printf("First 10 elements in /\n");
00064 int i=0;
00065 while((entry = idx->readdir(dir))) {
00066
00067 printf("%lld %lld (%s)(%s)%c\n",entry->offset, entry->sz, idx->cwd,entry->d_name,entry->has_child ? '/' : ' ');
00068
00069
00070 if(i++ > 10) break;
00071 }
00072
00073 idx->closedir(dir);
00074
00075
00076 fs_dir *dirs[20];
00077 dirs[0] = idx->opendir("/");
00078 if(!dirs[0]) {
00079 printf("bad...\n");
00080 return 0;
00081 }
00082
00083 i=0;
00084 while(i<20) {
00085 entry = idx->readdir(dirs[i]);
00086 if(entry->has_child) {
00087 i++;
00088 printf("i=%d entry->sz=%d, name=%s\n",i,entry->sz,entry->full_name);
00089 dirs[i] = idx->opendir(entry->full_name);
00090 if(!dirs[i]) {
00091 printf("bad...\n");
00092 return 0;
00093 }
00094 continue;
00095 }
00096
00097 break;
00098 }
00099
00100 while(i>=0) {
00101 idx->closedir(dirs[i]);
00102 i--;
00103 }
00104
00105 printf("%lld %d %s\n",entry->offset, entry->sz, entry->full_name);
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 }