16 #define _XOPEN_SOURCE 700 26 #define FILENAME_LENGTH 1024 28 void usage(
char *name) {
29 fprintf(stderr,
"Usage: %s options <sionfn> \n\nwith the following optional options (default values in parenthesis):\n\n",name);
31 fprintf(stderr,
" [-a] print all information about all blocks \n");
32 fprintf(stderr,
" [-v] verbose mode \n");
37 int main(
int argc,
char **argv)
40 char infilename[FILENAME_LENGTH];
50 sion_int32 lendianness;
51 sion_int32 lfsblksize;
52 sion_int32 lntasks, lnfiles;
53 sion_int64 *sion_chunkcount;
55 sion_int64 *sion_tmpintfield;
58 int sid,size,blocks,gblknum, ntasks,nfiles, maxblocks;
59 sion_int32 fsblksize,endianness;
60 sion_int64 start_of_varheader;
61 sion_int64 *sion_chunksizes;
62 sion_int64 *sion_globalranks;
64 sion_int64 globalskip;
65 sion_int64 *sion_currentpos;
66 sion_int64 *sion_currentblocknr;
67 sion_int64 *siondump_sum_bytsionlibes_per_task;
68 sion_int64 siondump_sum_bytes;
69 sion_int64 siondump_filesize;
75 if( argv[i][0] ==
'-' ) {
76 switch( argv[i][1] ) {
93 strcpy(infilename,argv[argc-1]);
95 fileptr=fopen(infilename,
"r");
97 fprintf(stderr,
"cannot open %s for reading, aborting ...\n", infilename);
100 sionstr = (
char *) malloc(strlen(
SION_ID)*
sizeof(char));
101 nread=fread(sionstr,1,strlen(
SION_ID),fileptr);
103 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%zu)\n",nread);
105 printf(
"sionstr=\"%c%c%c%c\"\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
108 fprintf(stderr,
"sionlib: not a sion file(ID: %c%c%c%c)\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
111 nread=fread(&lendianness,1,
sizeof(lendianness),fileptr);
112 if(nread!=
sizeof(lendianness)) {
113 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lendianness));
115 printf(
"endianness = 0x%X\n",lendianness);
117 nread=fread(&lfsblksize,1,
sizeof(lfsblksize),fileptr);
118 if(nread!=
sizeof(lfsblksize)) {
119 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lfsblksize));
121 printf(
"fsblksize= %d\n",lfsblksize);
123 nread=fread(&lntasks,1,
sizeof(lntasks),fileptr);
124 if(nread!=
sizeof(lntasks)) {
125 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lntasks));
127 printf(
"ntasks = %d\n",lntasks);
129 nread=fread(&lnfiles,1,
sizeof(lnfiles),fileptr);
130 if(nread!=
sizeof(lnfiles)) {
131 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lnfiles));
133 printf(
"nfiles = %d\n",lnfiles);
135 prefix=malloc(SION_FILENAME_LENGTH);
136 nread=fread(prefix,1,SION_FILENAME_LENGTH,fileptr);
137 if(nread!=SION_FILENAME_LENGTH) {
138 fprintf(stderr,
"sionlib: cannot read file name %d info to the header, aborting ... (%d!=%zu)\n",i+1,SION_FILENAME_LENGTH,nread);
140 printf(
"prefix=\"%s\"\n",prefix);
142 sion_globalranks = (sion_int64 *)malloc(lntasks*
sizeof(sion_int64));
143 nread=fread(sion_globalranks,
sizeof(sion_int64),lntasks,fileptr);
145 fprintf(stderr,
"sionlib: cannot read header(globalranks) from file, aborting ... (%zu!=%d)\n",nread,lntasks);
147 printf(
"Read globalranks\n");
148 for (i=0;i<lntasks;i++)
149 printf(
"\tsion_globalranks[%d]=%lld\n",i,sion_globalranks[i]);
151 sion_chunksizes = (sion_int64 *)malloc(
MAXCHUNKS*lntasks*
sizeof(sion_int64));
152 nread=fread(sion_chunksizes,
sizeof(sion_int64),lntasks,fileptr);
154 fprintf(stderr,
"sionlib: cannot read header(chunksizes) from file, aborting ... (%zu!=%d)\n",nread,lntasks);
156 printf(
"Read chunksizes\n");
157 for (i=0;i<lntasks;i++)
158 printf(
"\tsion_chunksizes[%d]=%lld\n",i,sion_chunksizes[i]);
160 nread=fread(&maxblocks,1,
sizeof(maxblocks),fileptr);
161 if(nread!=
sizeof(maxblocks)) {
162 fprintf(stderr,
"sionlib: cannot read header(maxblocks) from file, aborting ... (%zu!=%d)\n",nread,
sizeof(maxblocks));
164 printf(
"maxblocks = %d\n",maxblocks);
166 nread=fread(&start_of_varheader,1,
sizeof(start_of_varheader),fileptr);
167 if(nread!=
sizeof(start_of_varheader)) {
168 fprintf(stderr,
"sionlib: cannot read header(start_of_varheader) from file, aborting ... (%zu!=%d)\n",nread,
sizeof(start_of_varheader));
170 printf(
"start_of_varheader= %lld\n",start_of_varheader);
173 lseek(fileno(fileptr),(off_t) start_of_varheader,SEEK_SET);
175 sion_chunkcount = (sion_int64 *)malloc(lntasks*
sizeof(sion_int64));
176 nread=fread(sion_chunkcount,
sizeof(sion_int64),lntasks, fileptr );
179 fprintf(stderr,
"sionlib: cannot read chunkcount[] from meta block 2 of file, aborting ... (%d)\n",lntasks);
182 for(i=0;i<lntasks;i++)
183 printf(
"numblocks on task %02d is %10lld\n",i,sion_chunkcount[i]);
188 for(i=0;i<maxblocks;i++)
190 nread=fread(sion_chunksizes,
sizeof(sion_int64),lntasks, fileptr );
193 fprintf(stderr,
"sionlib: cannot read chunksizes[%d] from meta block 2 of file, aborting ... (%d)\n",i,lntasks);
195 printf(
"Block %02d:\n",i);
196 for(j=0;j<lntasks;j++) printf(
"\ttotal chunksize for task %02d: %10lld\n",j,sion_chunksizes[j]);
Sion File Descriptor Structure.