SIONlib  1.7.4
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-2019 **
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 #define _XOPEN_SOURCE 700
17 
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <ctype.h>
22 
23 #include "sion.h"
24 #include "sion_fd.h"
25 
26 #define FILENAME_LENGTH 1024
27 
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);
30 
31  fprintf(stderr, " [-a] print all information about all blocks \n");
32  fprintf(stderr, " [-v] verbose mode \n");
33  exit(1);
34 }
35 
36 
37 int main(int argc, char **argv)
38 {
39  FILE *fileptr;
40  char infilename[FILENAME_LENGTH];
41  int i,j,rank,blknum;
42 
43  /* options */
44  int printall=0;
45  int verbose=0;
46 
47  /* for file infomation */
48  char *sionstr;
49  size_t nread;
50  sion_int32 lendianness;
51  sion_int32 lfsblksize;
52  sion_int32 lntasks, lnfiles;
53  sion_int64 *sion_chunkcount;
54 
55  sion_int64 *sion_tmpintfield;
56  char *prefix;
57 
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;
63 
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;
70  _sion_filedesc *sion_filedesc;
71 
72  /* parse command line */
73  i=1;
74  while( i < argc ) {
75  if( argv[i][0] == '-' ) {
76  switch( argv[i][1] ) {
77  case 'a':
78  printall = 1;
79  break;
80  case 'v':
81  verbose++;
82  break;
83  case 'h':
84  usage(argv[0]);
85  break;
86  default:
87  usage(argv[0]);
88  }
89  }
90  i++;
91  }
92 
93  strcpy(infilename,argv[argc-1]);
94 
95  fileptr=fopen(infilename,"r");
96  if (! fileptr ) {
97  fprintf(stderr, "cannot open %s for reading, aborting ...\n", infilename);
98  }
99 
100  sionstr = (char *) malloc(strlen(SION_ID)*sizeof(char));
101  nread=fread(sionstr,1,strlen(SION_ID),fileptr);
102  if(nread!=strlen(SION_ID)) {
103  fprintf(stderr, "sionlib: cannot read header from file, aborting ... (%zu)\n",nread);
104  }
105  printf("sionstr=\"%c%c%c%c\"\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
106  /* Check if this is a sion file */
107  if (strncmp(sionstr,SION_ID,strlen(SION_ID))) {
108  fprintf(stderr, "sionlib: not a sion file(ID: %c%c%c%c)\n",sionstr[0],sionstr[1],sionstr[2],sionstr[3]);
109  }
110 
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));
114  }
115  printf("endianness = 0x%X\n",lendianness);
116 
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));
120  }
121  printf("fsblksize= %d\n",lfsblksize);
122 
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));
126  }
127  printf("ntasks = %d\n",lntasks);
128 
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));
132  }
133  printf("nfiles = %d\n",lnfiles);
134 
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);
139  }
140  printf("prefix=\"%s\"\n",prefix);
141 
142  sion_globalranks = (sion_int64 *)malloc(lntasks*sizeof(sion_int64));
143  nread=fread(sion_globalranks,sizeof(sion_int64),lntasks,fileptr);
144  if(nread!=lntasks) {
145  fprintf(stderr, "sionlib: cannot read header(globalranks) from file, aborting ... (%zu!=%d)\n",nread,lntasks);
146  }
147  printf("Read globalranks\n");
148  for (i=0;i<lntasks;i++)
149  printf("\tsion_globalranks[%d]=%lld\n",i,sion_globalranks[i]);
150 
151  sion_chunksizes = (sion_int64 *)malloc(MAXCHUNKS*lntasks*sizeof(sion_int64));
152  nread=fread(sion_chunksizes,sizeof(sion_int64),lntasks,fileptr);
153  if(nread!=lntasks) {
154  fprintf(stderr, "sionlib: cannot read header(chunksizes) from file, aborting ... (%zu!=%d)\n",nread,lntasks);
155  }
156  printf("Read chunksizes\n");
157  for (i=0;i<lntasks;i++)
158  printf("\tsion_chunksizes[%d]=%lld\n",i,sion_chunksizes[i]);
159 
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));
163  }
164  printf("maxblocks = %d\n",maxblocks);
165 
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));
169  }
170  printf("start_of_varheader= %lld\n",start_of_varheader);
171 
172  fflush(fileptr);
173  lseek(fileno(fileptr),(off_t) start_of_varheader,SEEK_SET);
174 
175  sion_chunkcount = (sion_int64 *)malloc(lntasks*sizeof(sion_int64));
176  nread=fread(sion_chunkcount,sizeof(sion_int64),lntasks, fileptr );
177  if(nread!=lntasks)
178  {
179  fprintf(stderr, "sionlib: cannot read chunkcount[] from meta block 2 of file, aborting ... (%d)\n",lntasks);
180  }
181 
182  for(i=0;i<lntasks;i++)
183  printf("numblocks on task %02d is %10lld\n",i,sion_chunkcount[i]);
184 
185 
186  /* free(sion_chunksizes); */
187  /* sion_chunksizes = (sion_int64 *) malloc(lntasks*sizeof(sion_int64)); */
188  for(i=0;i<maxblocks;i++)
189  {
190  nread=fread(sion_chunksizes,sizeof(sion_int64),lntasks, fileptr );
191  if(nread!=lntasks)
192  {
193  fprintf(stderr, "sionlib: cannot read chunksizes[%d] from meta block 2 of file, aborting ... (%d)\n",i,lntasks);
194  }
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]);
197  }
198 
199  fclose(fileptr);
200  return 0;
201 }
202 
203 
Sion File Descriptor Structure.
Definition: sion_filedesc.h:79
#define MAXCHUNKS
Definition: sion_common.h:35
#define SION_ID
Definition: sion_metadata.h:14