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.