24 #define FILENAME_LENGTH 1024 26 void usage(
char *name) {
27 fprintf(stderr,
"Usage: %s options <sionfn> \n\nwith the following optional options (default values in parenthesis):\n\n",name);
29 fprintf(stderr,
" [-a] print all information about all blocks \n");
30 fprintf(stderr,
" [-v] verbose mode \n");
35 int main(
int argc,
char **argv)
38 char infilename[FILENAME_LENGTH];
48 sion_int32 lendianness;
49 sion_int32 lfsblksize;
50 sion_int32 lntasks, lnfiles;
51 sion_int64 *sion_chunkcount;
53 sion_int64 *sion_tmpintfield;
56 int sid,size,blocks,gblknum, ntasks,nfiles, maxblocks;
57 sion_int32 fsblksize,endianness;
58 sion_int64 start_of_varheader;
59 sion_int64 *sion_chunksizes;
60 sion_int64 *sion_globalranks;
62 sion_int64 globalskip;
63 sion_int64 *sion_currentpos;
64 sion_int64 *sion_currentblocknr;
65 sion_int64 *siondump_sum_bytsionlibes_per_task;
66 sion_int64 siondump_sum_bytes;
67 sion_int64 siondump_filesize;
73 if( argv[i][0] ==
'-' ) {
74 switch( argv[i][1] ) {
91 strcpy(infilename,argv[argc-1]);
93 fileptr=fopen(infilename,
"r");
95 fprintf(stderr,
"cannot open %s for reading, aborting ...\n", infilename);
98 sionstr = (
char *) malloc(strlen(
SION_ID)*
sizeof(char));
99 nread=fread(sionstr,1,strlen(
SION_ID),fileptr);
101 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",nread);
103 printf(
"sionstr=\"%c%c%c%c\"\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
106 fprintf(stderr,
"sionlib: not a sion file(ID: %c%c%c%c)\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
109 nread=fread(&lendianness,1,
sizeof(lendianness),fileptr);
110 if(nread!=
sizeof(lendianness)) {
111 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lendianness));
113 printf(
"endianness = 0x%X\n",lendianness);
115 nread=fread(&lfsblksize,1,
sizeof(lfsblksize),fileptr);
116 if(nread!=
sizeof(lfsblksize)) {
117 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lfsblksize));
119 printf(
"fsblksize= %d\n",lfsblksize);
121 nread=fread(&lntasks,1,
sizeof(lntasks),fileptr);
122 if(nread!=
sizeof(lntasks)) {
123 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lntasks));
125 printf(
"ntasks = %d\n",lntasks);
127 nread=fread(&lnfiles,1,
sizeof(lnfiles),fileptr);
128 if(nread!=
sizeof(lnfiles)) {
129 fprintf(stderr,
"sionlib: cannot read header from file, aborting ... (%d)\n",
sizeof(lnfiles));
131 printf(
"nfiles = %d\n",lnfiles);
133 prefix=malloc(SION_FILENAME_LENGTH);
134 nread=fread(prefix,1,SION_FILENAME_LENGTH,fileptr);
135 if(nread!=SION_FILENAME_LENGTH) {
136 fprintf(stderr,
"sionlib: cannot read file name %d info to the header, aborting ... (%d!=%d)\n",i+1,SION_FILENAME_LENGTH,nread);
138 printf(
"prefix=\"%s\"\n",prefix);
140 sion_globalranks = (sion_int64 *)malloc(lntasks*
sizeof(sion_int64));
141 nread=fread(sion_globalranks,
sizeof(sion_int64),lntasks,fileptr);
143 fprintf(stderr,
"sionlib: cannot read header(globalranks) from file, aborting ... (%d!=%d)\n",nread,lntasks);
145 printf(
"Read globalranks\n");
146 for (i=0;i<lntasks;i++)
147 printf(
"\tsion_globalranks[%d]=%lld\n",i,sion_globalranks[i]);
149 sion_chunksizes = (sion_int64 *)malloc(
MAXCHUNKS*lntasks*
sizeof(sion_int64));
150 nread=fread(sion_chunksizes,
sizeof(sion_int64),lntasks,fileptr);
152 fprintf(stderr,
"sionlib: cannot read header(chunksizes) from file, aborting ... (%d!=%d)\n",nread,lntasks);
154 printf(
"Read chunksizes\n");
155 for (i=0;i<lntasks;i++)
156 printf(
"\tsion_chunksizes[%d]=%lld\n",i,sion_chunksizes[i]);
158 nread=fread(&maxblocks,1,
sizeof(maxblocks),fileptr);
159 if(nread!=
sizeof(maxblocks)) {
160 fprintf(stderr,
"sionlib: cannot read header(maxblocks) from file, aborting ... (%d!=%d)\n",nread,
sizeof(maxblocks));
162 printf(
"maxblocks = %d\n",maxblocks);
164 nread=fread(&start_of_varheader,1,
sizeof(start_of_varheader),fileptr);
165 if(nread!=
sizeof(start_of_varheader)) {
166 fprintf(stderr,
"sionlib: cannot read header(start_of_varheader) from file, aborting ... (%d!=%d)\n",nread,
sizeof(start_of_varheader));
168 printf(
"start_of_varheader= %lld\n",start_of_varheader);
171 lseek(fileno(fileptr),(off_t) start_of_varheader,SEEK_SET);
173 sion_chunkcount = (sion_int64 *)malloc(lntasks*
sizeof(sion_int64));
174 nread=fread(sion_chunkcount,
sizeof(sion_int64),lntasks, fileptr );
177 fprintf(stderr,
"sionlib: cannot read chunkcount[] from meta block 2 of file, aborting ... (%d)\n",lntasks);
180 for(i=0;i<lntasks;i++)
181 printf(
"numblocks on task %02d is %10lld\n",i,sion_chunkcount[i]);
186 for(i=0;i<maxblocks;i++)
188 nread=fread(sion_chunksizes,
sizeof(sion_int64),lntasks, fileptr );
191 fprintf(stderr,
"sionlib: cannot read chunksizes[%d] from meta block 2 of file, aborting ... (%d)\n",i,lntasks);
193 printf(
"Block %02d:\n",i);
194 for(j=0;j<lntasks;j++) printf(
"\ttotal chunksize for task %02d: %10lld\n",j,sion_chunksizes[j]);
Sion File Descriptor Structure.