24 #ifndef __USE_FILE_OFFSET64    25 #define __USE_FILE_OFFSET64    34 #include "sion_error_handler.h"    42 #include "sion_hints.h"    47 #include "sion_buddy_common.h"    50 sion_io_stat_t* sion_get_io_info_buddy(
int sid, 
int roles, 
int flag);
    89                        sion_int64 *globalskip,
    90                        sion_int64 *start_of_varheader,
    91                        sion_int64 **sion_chunksizes,
    92                        sion_int64 **sion_globalranks,
    93                        sion_int64 **sion_blockcount,
    94                        sion_int64 **sion_blocksizes ) {
    95   int       rc = SION_SUCCESS;
    97 #ifdef SION_SERIAL_MASTER   103     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   105   DPRINTFP((1, 
"sion_get_locations", -1, 
"enter\n"));
   107 #ifdef SION_SERIAL_MASTER   116     for (i = 0; i < sion_filedesc->
ntasks; i++) {
   117       int lfile=sion_filedesc->
mapping[i*2+0];
   118       int lrank=sion_filedesc->
mapping[i*2+1];
   123     for (i = 0; i < sion_filedesc->
ntasks; i++) {
   124       int lfile=sion_filedesc->
mapping[i*2+0];
   125       int lrank=sion_filedesc->
mapping[i*2+1];
   128       for (blknum = 0; blknum < sion_filedesc->
all_blockcount[i]; blknum++) {
   136   *ntasks             = sion_filedesc->
ntasks;
   145   DPRINTFP((1, 
"sion_get_locations", -1, 
"leave\n"));
   150 int _sion_close_sid(
int sid)
   152   int       rc = SION_SUCCESS;
   157     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_close: invalid sion_filedesc, aborting %d ...\n", sid));
   159   rc=_sion_close(sion_filedesc);
   161   if(rc==SION_SUCCESS) {
   163     _sion_free_filedesc(sion_filedesc);
   189   int       rc = SION_SUCCESS;
   194     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   196   DPRINTFP((1, 
"sion_get_current_location", -1, 
"enter\n"));
   203   DPRINTFP((1, 
"sion_get_current_location", -1, 
"leave\n"));
   223                      sion_int32 **mapping,
   225   int       rc = SION_SUCCESS;
   230     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   232   DPRINTFP((1, 
"sion_get_mapping", -1, 
"enter\n"));
   236     *mapping=sion_filedesc->
mapping;
   240   *numfiles=sion_filedesc->
nfiles;
   242   DPRINTFP((1, 
"sion_get_mapping", -1, 
"leave (mapping_size=%d)\n",*mapping_size));
   259   DPRINTFP((1, 
"sion_get_file_endianness", -1, 
"enter (sid=%d)\n",sid));
   263     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   266   DPRINTFP((1, 
"sion_get_file_endianness", -1, 
"leave (sid=%d)\n",sid));
   268   return ((sion_filedesc->
endianness >> 8) & 1);
   283   DPRINTFP((1, 
"sion_endianness_swap_needed", -1, 
"enter (sid=%d)\n",sid));
   287   DPRINTFP((1, 
"sion_endianness_swap_needed", -1, 
"leave (swap_needed=%d)\n",
   311                                sion_int64 **sion_currentpos,
   312                                sion_int64 **sion_currentblocknr)
   314   int       rc = SION_SUCCESS;
   319     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   321   DPRINTFP((1, 
"sion_get_current_locations", -1, 
"enter\n"));
   323   *ntasks = sion_filedesc->
ntasks;
   327   DPRINTFP((1, 
"sion_get_current_locations", -1, 
"leave\n"));
   331 int sion_get_number_of_files(
int sid)
   337     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   340   return (sion_filedesc->
nfiles);
   343 int sion_get_filenumber(
int sid)
   349     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   355 int sion_is_serial_opened(
int sid)
   361     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   369 int sion_using_hints(
int sid)
   375     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   381 sion_int64 sion_get_bytes_written(
int sid)
   384   sion_int64 bytes=SION_SIZE_NOT_VALID;
   388     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   404 sion_int64 sion_get_bytes_read(
int sid)
   407   sion_int64 bytes=SION_SIZE_NOT_VALID;
   411     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   431   return(sion_get_io_info_by_spec(sid,SION_ROLE_COLLECTOR|SION_ROLE_WRITER|SION_ROLE_NOWRITER,SION_GET_IO_INFO_FLAG_NONE));
   436 sion_io_stat_t* sion_get_io_info_by_spec(
int sid, 
int roles, 
int flag) {
   442     _sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid);
   448     p=sion_get_io_info_buddy(sid,roles,flag);
   472 size_t sion_fwrite(
const void *data, 
size_t size, 
size_t nitems, 
int sid)
   474   sion_int64 bytes_to_write, bbytes;
   479   DPRINTFP((1, 
"sion_fwrite", -1, 
"enter size=%ld nitems=%ld\n",(
long) size, (
long) nitems));
   483     return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   488   bytes_to_write=size*nitems;
   495       return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
   496                                       "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
   497                                       (
int) bytes_to_write, sid));
   500     char *data_ptr=(
void *) data;
   501     sion_int64 bytes_left = sion_filedesc->
chunksize -
   506     if (bbytes + bytes_to_write > bytes_left) {
   512           return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
   513                                   "could not write data (%d bytes) to file (sid=%d) ...",  (
int) bbytes, sid));
   516         return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
   517                                 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
   524     sion_int64 bytes_buffered=
_sion_buffer_push(sion_filedesc,data_ptr,bytes_to_write);
   525     bytes_to_write-=bytes_buffered;
   526     data_ptr+=bytes_buffered;
   528     while(bytes_to_write>0) {
   534           return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
   535                                   "could not write data (%d bytes) to file (sid=%d) ...",  (
int) bbytes, sid));
   538         return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
   539                                 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
   547       bytes_to_write-=bytes_buffered;
   548       data_ptr+=bytes_buffered;
   551     bytes_to_write=size*nitems;
   553     rc=(size_t) (size ? bytes_to_write / size : 0);
   559       if(frc != bytes_to_write) {
   560         return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
   561                                 "could not write data (%d bytes) to file (frc=%d sid=%d) ...",  (
int) bytes_to_write, (
int) frc, sid));
   564       rc=(size_t) (size ? bytes_to_write / size : 0);
   567       return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
"could not ensure free space for this block, returning %d ...", sid));
   573   DPRINTFP((1, 
"sion_fwrite", -1, 
"leave rc=%ld\n",(
long) rc));
   591 size_t sion_fread( 
void *data, 
size_t size, 
size_t nitems, 
int sid) {
   593   sion_int64 bytes, bread, bytes_left;
   597     return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
   601     return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid pointer, aborting %d ...\n", data));
   607   bytes_left = sion_filedesc->
startpos +
   612   DPRINTFP((1, 
"sion_fread", -1, 
"enter\n"));
   613   DPRINTFP((4, 
"sion_fread", -1, 
" parameter size=%ld nitems=%ld\n",(
long) size,(
long) nitems));
   621   if((sion_filedesc->
chunksize < bytes) || ((bytes_left < bytes) &&
   622                                             (bytes_left != 0))) {
   624     return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"not enough bytes left in chunk, aborting (%ld < %ld) ...\n", bytes_left, bytes));
   629     DPRINTFP((256, 
"sion_fread", -1, 
"  _sion_file_read returns %ld\n",(
long) bread));
   632     return (
size_t) (size ? bread / size : 0);
   635   bread = size ? bread / size : 0;
   640   DPRINTFP((4, 
"sion_fread", -1, 
" return value  %ld\n",(
long) bread));
   641   DPRINTFP((1, 
"sion_fread", -1, 
"leave\n"));
   659 int sion_seek(
int sid, 
int rank, 
int currentblocknr, sion_int64 posinblk)
   664   rc=
sion_seek_fp(sid,rank,currentblocknr,posinblk,&fileptr);
   682 int sion_seek_fp(
int sid, 
int rank, 
int currentblocknr, sion_int64 posinblk, FILE **fileptr)
   684   int             rc = SION_SUCCESS;
   687   DPRINTFP((1, 
"sion_seek_fp", -1, 
" enter seek with sid=%d\n", sid));
   692     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_seek: invalid sion_filedesc, aborting %d ...\n", sid));
   697       return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_seek_fp: unknown file open state !(READ|WRITE), aborting %d ...", sid));
   708       return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_seek_fp: unknown file open state !(PAR|SER|SERRANK|MAPPED), aborting %d ...", sid));
   732       return _sion_errorprint_on_rank(SION_NOT_SUCCESS, _SION_ERROR_RETURN, sion_filedesc->
rank, 
"sion_seek_fp: seek not supported for this type (write, sion_open_rank), aborting ...");
   746       *fileptr=sion_filedesc->
fileptr->fileptr;
   755   DPRINTFP((1, 
"sion_seek_fp", -1, 
"leave seek rc=%d\n",rc));
   772   int       rc = SION_NOT_SUCCESS;
   778     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_feof: invalid sion_filedesc, aborting %d ...\n", sid));
   781   DPRINTFP((8, 
"sion_feof", -1, 
"enter feof   sid=%d currentpos=%15lld\n", sid, sion_filedesc->
currentpos));
   789   DPRINTFP((16, 
"sion_feof", -1,
   790             " after flush sid=%d currentpos=%15lld maxpos= %lld startpos=%lld curblknr=%d\n",
   796     DPRINTFP((16, 
"sion_feof", -1, 
" end of current block %d not reached sid=%d\n",
   802       _sion_apply_hints(sion_filedesc,SION_HINTS_FREE_TYPE_CHUNK);
   809       _sion_apply_hints(sion_filedesc,SION_HINTS_ACCESS_TYPE_CHUNK);
   813       rc = SION_NOT_SUCCESS;
   814       DPRINTFP((8, 
"sion_feof", -1,
   815                 " end of block %d reached, skipping to next %lld -> %lld position=%lld gs=%lld sid=%d\n",
   821       DPRINTFP((8, 
"sion_feof", -1, 
" end of last block %d reached sid=%d\n", sion_filedesc->
currentblocknr, sid));
   826   DPRINTFP((8, 
"sion_feof", -1, 
"leave feof   sid=%d currentpos=%15lld rc=%d\n", sid, sion_filedesc->
currentpos, rc));
   858   sion_int64 bytes_avail=SION_SIZE_NOT_VALID;
   863     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_bytes_avail_in_chunk: invalid sion_filedesc, aborting %d ...\n", sid));
   872   bytes_avail = maxpos - sion_filedesc->
currentpos;
   874   DPRINTFP((8, 
"sion_bytes_avail_in_chunk", -1,
   875             "leave sid=%d rank=%4d  currentpos=%lld  maxpos= %lld -> bytes to read %lld\n",
   876             sid, sion_filedesc->
rank, sion_filedesc->
currentpos, maxpos, bytes_avail));
   878   return (bytes_avail);
   897     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_position: invalid sion_filedesc, aborting %d ...\n", sid));
   907 int sion_set_fp_closed(
int sid)
   909   int       rc = SION_SUCCESS;
   914     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_fp_closed: invalid sion_filedesc, aborting %d ...\n", sid));
   920 int sion_set_second_fp(
int sid, FILE *secondfd)
   922   int       rc = SION_SUCCESS;
   928     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
   932     return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_set_second_fp: file was not opened in ANSI mode, aborting %d ...", sid));
   946 int sion_unset_second_fp(
int sid)
   948   int       rc = SION_SUCCESS;
   953     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
   957     return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_unset_second_fp: file was not opened in ANSI mode, aborting %d ...", sid));
   964 int sion_optimize_fp_buffer(
int sid)
   966   int       rc = SION_SUCCESS;
   971     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
   975   if (sion_filedesc->
fpbuffer == NULL) {
   976     return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_optimize_fp_buffer: cannot allocate internal buffer of size %lu , aborting ...", (
unsigned long) sion_filedesc->
fsblksize));
   993   int       rc = SION_SUCCESS;
   998     return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
  1017   sion_int64      byteswritten;
  1018   int             rc = SION_SUCCESS;
  1022       return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_ensure_free_space: invalid sion_filedesc, returning %d ...\n", sid));
  1025   DPRINTFP((8, 
"_sion_ensure_free_space", -1, 
"enter ensure_free   sid=%d bytes=%lld\n", sid, bytes));
  1028     DPRINTFP((8, 
"_sion_ensure_free_space", -1, 
"invalid opened\n"));
  1029     return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_ensure_free_space[%2d]: file is opened invalid sion_mode, returning ...", sion_filedesc->
rank));
  1031   if (!sion_filedesc->
usecoll) {
  1032     if (sion_filedesc->
fileptr == NULL) {
  1033       DPRINTFP((8, 
"_sion_ensure_free_space", -1, 
"file not opened\n"));
  1034       return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_ensure_free_space[%2d]: file is not open, returning ...", sion_filedesc->
rank));
  1039     DPRINTFP((8, 
"_sion_ensure_free_space", -1, 
"could not write %lld bytes, chunksize=%lld\n", bytes, sion_filedesc->
chunksize));
  1040     return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_ensure_free_space[%2d]: could not write %lld bytes, chunksize=%lld, returning ...",sion_filedesc->
rank, bytes, sion_filedesc->
chunksize));
  1045   DPRINTFP((16, 
"_sion_ensure_free_space", -1,
  1046             "  after getpos sid=%d fileposition is %lld bytes=%lld\n", sid, sion_filedesc->
currentpos, bytes));
  1050   DPRINTFP((16, 
"_sion_ensure_free_space", -1,
  1051             " sid=%d byteswritten(%lld) + new bytes (%lld) = %lld\n", sid, byteswritten, bytes, byteswritten + bytes));
  1053   if ((byteswritten + bytes) > sion_filedesc->
chunksize) {
  1058   DPRINTFP((8, 
"_sion_ensure_free_space", -1,
  1059             "leave ensure_free   sid=%d fileposition is %lld bw+bytes=%lld <= chunksize=%lld (fsblksize=%d)\n",
  1067 int sion_is_thread_safe() {
  1068 #ifdef SION_PTHREADS  1069   return(SION_SUCCESS);
  1071   return(SION_NOT_SUCCESS);
  1086   int rc=SION_NOT_SUCCESS;
  1088   *numbytes=SION_SIZE_NOT_VALID;
  1089   *numfds=SION_SIZE_NOT_VALID;
  1093     return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_sizeof: invalid sion_filedesc, returning %d ...\n", sid));
  1095   DPRINTFP((2, 
"sion_get_sizeof", -1, 
"enter sid=%d\n", sid));
  1099   DPRINTFP((2, 
"sion_get_sizeof", -1, 
"leave sid=%d numbytes=%d numfds=%d\n", sid, *numbytes, *numfds));
  1106 #define DFUNCTION "sion_dup"  1122 int sion_dup(
int sid, 
int mode, 
int rank, uint64_t key)
  1124   int             new_sid = SION_ID_NOT_VALID;
  1129     return(_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN,
"sion_dup: invalid sion_filedesc, returning %d ...\n", sid));
  1131   DPRINTFP((8, DFUNCTION, -1, 
"enter sid=%d\n", sid));
  1134     DPRINTFP((8, DFUNCTION, -1, 
"invalid opened\n"));
  1135     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, DFUNCTION 
"[%2d]: file is not opened in read mode, returning ...", sion_filedesc->
rank));
  1138   new_sid=
_sion_dup(sid, mode, rank, key);
  1140   DPRINTFP((8, DFUNCTION, -1, 
"leave sid=%d new_sid=%d\n", sid, new_sid));
  1147 #define DFUNCTION "sion_dedup"  1159   DPRINTFP((8, DFUNCTION, -1, 
"enter sid=%d\n", sid));
  1163   DPRINTFP((8, DFUNCTION, -1, 
"leave sid=%d rc=%d\n", sid, rc));
  1170 #define DFUNCTION "sion_lock_register_lock_callbacks"  1184   DPRINTFP((8, DFUNCTION, -1, 
"enter\n"));
  1186   rc=_sion_lock_register_lock_callbacks(lock,unlock,lock_data);
  1188   DPRINTFP((8, DFUNCTION, -1, 
"leave rc=%d\n", rc));
  1194 #define DFUNCTION "sion_lock_user_callbacks_defined"  1203   DPRINTFP((8, DFUNCTION, -1, 
"enter\n"));
  1205   rc=_sion_lock_user_callbacks_defined();
  1207   DPRINTFP((8, DFUNCTION, -1, 
"leave rc=%d\n", rc));
 int sion_feof(int sid)
Function that indicates whether the end of file is reached for this task.
 
sion_int64 _sion_file_write(const void *data, sion_int64 bytes, _sion_fileptr *sion_fileptr)
Write data to file.
 
sion_int64 _sion_file_get_position(_sion_fileptr *sion_fileptr)
Get new position in file.
 
int _sion_buffer_flush(_sion_filedesc *sion_filedesc)
Flush buffer.
 
int _sion_flush_block(_sion_filedesc *sion_filedesc)
Update the internal data structure.
 
int sion_dup(int sid, int mode, int rank, uint64_t key)
Function which duplicates a sion file descriptor.
 
int _sion_seek_on_all_ranks_read(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
 
sion_int64 _sion_file_set_position(_sion_fileptr *sion_fileptr, sion_int64 startpointer)
Set new position in file.
 
sion_int64 sion_bytes_avail_in_block(int sid)
Return the number of bytes available in the current chunk.
 
sion_int64 sion_bytes_avail_in_chunk(int sid)
Function that returns the number of bytes available in the current chunk.
 
int _sion_buffer_get_data_ptr(_sion_filedesc *sion_filedesc, void **data, sion_int64 *bytes)
Pop all data from buffer.
 
Sion File Descriptor Structure.
 
int sion_get_endianness(void)
Return endianness.
 
int sion_ensure_free_space(int sid, sion_int64 bytes)
Funtion to ensure that enough space is available for writing.
 
sion_int64 * all_blockcount
 
sion_int64 sion_get_position(int sid)
Function that returns the current file position.
 
int sion_get_file_endianness(int sid)
Returns edianness of data in file sid.
 
#define SION_FILESTATE_SEROPEN
 
int _sion_file_purge(_sion_fileptr *sion_fileptr)
Purge data to file.
 
sion_int64 _sion_file_read(void *data, sion_int64 bytes, _sion_fileptr *sion_fileptr)
Read data from file.
 
int _sion_seek_on_all_ranks_read_mapped(_sion_filedesc *sion_filedesc_master, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
 
sion_int64 * all_currentpos
 
int _sion_seek_on_all_ranks_write_mapped(_sion_filedesc *sion_filedesc_master, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
 
int _sion_file_set_buffer(_sion_fileptr *sion_fileptr, char *buffer, sion_int32 buffer_size)
Set buffer of fp.
 
sion_int64 * all_globalranks
 
int _sion_alloc_filedesc_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion arrays.
 
int sion_lock_register_lock_callbacks(int lock(void *), int unlock(void *), void *lock_data)
Function which registers callback funtions for lock and unlock internal access to shared data structu...
 
int _sion_get_size_of_filedesc(_sion_filedesc *sion_filedesc, int *numbytes, int *numfds)
get size of internal data structure sion_filedesc
 
sion_int64 * all_currentblocknr
 
int _sion_alloc_filedesc_block_arrays_only(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion structure, fields for all chunksizes of all tasks.
 
sion_int64 _sion_buffer_push(_sion_filedesc *sion_filedesc, const void *data, sion_int64 bytes)
Push data to buffer.
 
int _sion_free_io_info(sion_io_stat_t *p)
frees an io_info data structure
 
int _sion_vcdtype(int sid)
 
int sion_get_current_locations(int sid, int *ntasks, sion_int64 **sion_currentpos, sion_int64 **sion_currentblocknr)
Returns current position in file and pointer fiels containing chunk sizes.
 
int _sion_dedup(int sid)
Destroy a duplicated sion file descriptor.
 
sion_int32 fileptr_exported
 
int sion_get_locations(int sid, int *ntasks, int *maxchunks, sion_int64 *globalskip, sion_int64 *start_of_varheader, sion_int64 **sion_chunksizes, sion_int64 **sion_globalranks, sion_int64 **sion_blockcount, sion_int64 **sion_blocksizes)
Returns pointers to internal fields.
 
int sion_get_mapping(int sid, int *mapping_size, sion_int32 **mapping, int *numfiles)
Returns pointers to the internal field mapping.
 
size_t sion_fwrite(const void *data, size_t size, size_t nitems, int sid)
Write data to sion file.
 
int sion_endianness_swap_needed(int sid)
Returns whether or not byte swapping is needed for sid.
 
void * _sion_vcdtovcon(int sid)
 
#define SION_FILE_FLAG_ANSI
 
int _sion_dup(int sid, int mode, int rank, uint64_t key)
Create a duplicated sion file descriptor.
 
#define SION_FILEMODE_READ
 
int sion_seek(int sid, int rank, int currentblocknr, sion_int64 posinblk)
Function to set the file pointer to a new position.
 
int _sion_update_fileposition(_sion_filedesc *sion_filedesc)
Update the internal data structure (check fileposition)
 
int sion_lock_user_callbacks_defined()
Function which return flag, if user callback for locking are registered.
 
#define SION_FILESTATE_PAROPEN
 
int _sion_file_set_second_fileptr(_sion_fileptr *sion_fileptr, FILE *fileptr)
Set second fileptr for file if opened with ANSI.
 
int sion_get_sizeof(int sid, int *numbytes, int *numfds)
Function returns size of internal data structure for sid.
 
int _sion_file_unset_second_fileptr(_sion_fileptr *sion_fileptr)
Unset second fileptr for file if opened with ANSI.
 
int _sion_seek_on_all_ranks_read_master(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
 
#define SION_FILESTATE_PAROPENMAPPEDMASTER
 
sion_int32 currentblocknr
 
#define SION_FILESTATE_SEROPENRANK
 
int _sion_create_new_block(_sion_filedesc *sion_filedesc)
Create a new block for the internal data structure.
 
#define SION_FILEDESCRIPTOR
 
sion_int64 * all_chunksizes
 
int _sion_print_filedesc(_sion_filedesc *sion_filedesc, int level, char *desc, int flag)
Print the initialized sion file description.
 
int _sion_freevcd(int sid)
 
#define SION_FILESTATE_CLOSE
 
size_t sion_fread(void *data, size_t size, size_t nitems, int sid)
Read data from sion file.
 
int _sion_seek_on_current_rank_read(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position in the same rank, updates internal data structure.
 
#define SION_FILEMODE_WRITE
 
int _sion_check_on_collective_mode(_sion_filedesc *sion_filedesc)
check if a collective operation are already called,
 
int sion_dedup(int sid)
Function which destroy a duplicated sion file descriptor.
 
int _sion_seek_on_all_ranks_write(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
 
sion_int64 start_of_varheader
 
#define SION_FILESTATE_SEROPENMASTER
 
sion_int64 * all_blocksizes
 
int _sion_file_flush(_sion_fileptr *sion_fileptr)
Flush data to file.
 
int sion_get_current_location(int sid, int *currentchunknr, sion_int64 *currentpos, int *maxchunks, sion_int64 **chunksizes)
Returns current position in file and pointer fiels containing chunk sizes.
 
_sion_filedesc ** multifiles
 
int sion_seek_fp(int sid, int rank, int currentblocknr, sion_int64 posinblk, FILE **fileptr)
Deprecated. Use sion_seek() instead.
 
int _sion_seek_on_current_rank_write(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position in the same rank, updates internal data structure.
 
int sion_flush(int sid)
Flushed sion file.