SIONlib  1.6.2
Scalable I/O library for parallel access to task-local files
dumpheader.c
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 /*
10  * dumpheader.c
11  *
12  * Created on: Sep 8, 2008
13  * Author: gstu0808
14  */
15 
16 #include <stdio.h>
17 #include <stdlib.h>
18 #include <string.h>
19 #include <ctype.h>
20 
21 #include "sion.h"
22 #include "sion_fd.h"
23 
24 #define FILENAME_LENGTH 1024
25 
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);
28 
29  fprintf(stderr, " [-a] print all information about all blocks \n");
30  fprintf(stderr, " [-v] verbose mode \n");
31  exit(1);
32 }
33 
34 
35 int main(int argc, char **argv)
36 {
37  FILE *fileptr;
38  char infilename[FILENAME_LENGTH];
39  int i,j,rank,blknum;
40 
41  /* options */
42  int printall=0;
43  int verbose=0;
44 
45  /* for file infomation */
46  char *sionstr;
47  size_t nread;
48  sion_int32 lendianness;
49  sion_int32 lfsblksize;
50  sion_int32 lntasks, lnfiles;
51  sion_int64 *sion_chunkcount;
52 
53  sion_int64 *sion_tmpintfield;
54  char *prefix;
55 
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;
61 
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;
68  _sion_filedesc *sion_filedesc;
69 
70  /* parse command line */
71  i=1;
72  while( i < argc ) {
73  if( argv[i][0] == '-' ) {
74  switch( argv[i][1] ) {
75  case 'a':
76  printall = 1;
77  break;
78  case 'v':
79  verbose++;
80  break;
81  case 'h':
82  usage(argv[0]);
83  break;
84  default:
85  usage(argv[0]);
86  }
87  }
88  i++;
89  }
90 
91  strcpy(infilename,argv[argc-1]);
92 
93  fileptr=fopen(infilename,"r");
94  if (! fileptr ) {
95  fprintf(stderr, "cannot open %s for reading, aborting ...\n", infilename);
96  }
97 
98  sionstr = (char *) malloc(strlen(SION_ID)*sizeof(char));
99  nread=fread(sionstr,1,strlen(SION_ID),fileptr);
100  if(nread!=strlen(SION_ID)) {
101  fprintf(stderr, "sionlib: cannot read header from file, aborting ... (%d)\n",nread);
102  }
103  printf("sionstr=\"%c%c%c%c\"\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
104  /* Check if this is a sion file */
105  if (strncmp(sionstr,SION_ID,strlen(SION_ID))) {
106  fprintf(stderr, "sionlib: not a sion file(ID: %c%c%c%c)\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
107  }
108 
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));
112  }
113  printf("endianness = 0x%X\n",lendianness);
114 
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));
118  }
119  printf("fsblksize= %d\n",lfsblksize);
120 
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));
124  }
125  printf("ntasks = %d\n",lntasks);
126 
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));
130  }
131  printf("nfiles = %d\n",lnfiles);
132 
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);
137  }
138  printf("prefix=\"%s\"\n",prefix);
139 
140  sion_globalranks = (sion_int64 *)malloc(lntasks*sizeof(sion_int64));
141  nread=fread(sion_globalranks,sizeof(sion_int64),lntasks,fileptr);
142  if(nread!=lntasks) {
143  fprintf(stderr, "sionlib: cannot read header(globalranks) from file, aborting ... (%d!=%d)\n",nread,lntasks);
144  }
145  printf("Read globalranks\n");
146  for (i=0;i<lntasks;i++)
147  printf("\tsion_globalranks[%d]=%lld\n",i,sion_globalranks[i]);
148 
149  sion_chunksizes = (sion_int64 *)malloc(MAXCHUNKS*lntasks*sizeof(sion_int64));
150  nread=fread(sion_chunksizes,sizeof(sion_int64),lntasks,fileptr);
151  if(nread!=lntasks) {
152  fprintf(stderr, "sionlib: cannot read header(chunksizes) from file, aborting ... (%d!=%d)\n",nread,lntasks);
153  }
154  printf("Read chunksizes\n");
155  for (i=0;i<lntasks;i++)
156  printf("\tsion_chunksizes[%d]=%lld\n",i,sion_chunksizes[i]);
157 
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));
161  }
162  printf("maxblocks = %d\n",maxblocks);
163 
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));
167  }
168  printf("start_of_varheader= %lld\n",start_of_varheader);
169 
170  fflush(fileptr);
171  lseek(fileno(fileptr),(off_t) start_of_varheader,SEEK_SET);
172 
173  sion_chunkcount = (sion_int64 *)malloc(lntasks*sizeof(sion_int64));
174  nread=fread(sion_chunkcount,sizeof(sion_int64),lntasks, fileptr );
175  if(nread!=lntasks)
176  {
177  fprintf(stderr, "sionlib: cannot read chunkcount[] from meta block 2 of file, aborting ... (%d)\n",lntasks);
178  }
179 
180  for(i=0;i<lntasks;i++)
181  printf("numblocks on task %02d is %10lld\n",i,sion_chunkcount[i]);
182 
183 
184  /* free(sion_chunksizes); */
185  /* sion_chunksizes = (sion_int64 *) malloc(lntasks*sizeof(sion_int64)); */
186  for(i=0;i<maxblocks;i++)
187  {
188  nread=fread(sion_chunksizes,sizeof(sion_int64),lntasks, fileptr );
189  if(nread!=lntasks)
190  {
191  fprintf(stderr, "sionlib: cannot read chunksizes[%d] from meta block 2 of file, aborting ... (%d)\n",i,lntasks);
192  }
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]);
195  }
196 
197  fclose(fileptr);
198  return 0;
199 }
200 
201 
Sion File Descriptor Structure.
Definition: sion_filedesc.h:77
#define MAXCHUNKS
Definition: sion_common.h:37
#define SION_ID
Definition: sion_metadata.h:12