24 #ifndef __USE_FILE_OFFSET64 25 #define __USE_FILE_OFFSET64 41 #include "sion_hints.h" 84 sion_int64 *globalskip,
85 sion_int64 *start_of_varheader,
86 sion_int64 **sion_chunksizes,
87 sion_int64 **sion_globalranks,
88 sion_int64 **sion_blockcount,
89 sion_int64 **sion_blocksizes ) {
90 int rc = SION_SUCCESS;
92 #ifdef SION_SERIAL_MASTER 94 int i, lfile, lrank, blknum;
99 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
101 DPRINTFP((1,
"sion_get_locations", -1,
"enter\n"));
103 #ifdef SION_SERIAL_MASTER 111 for (i = 0; i < sion_filedesc->
ntasks; i++) {
112 lfile=sion_filedesc->
mapping[i*2+0]; lrank=sion_filedesc->
mapping[i*2+1];
117 for (i = 0; i < sion_filedesc->
ntasks; i++) {
118 lfile=sion_filedesc->
mapping[i*2+0]; lrank=sion_filedesc->
mapping[i*2+1];
120 for (blknum = 0; blknum < sion_filedesc->
all_blockcount[i]; blknum++) {
128 *ntasks = sion_filedesc->
ntasks;
137 DPRINTFP((1,
"sion_get_locations", -1,
"leave\n"));
142 int _sion_close_sid(
int sid)
144 int rc = SION_SUCCESS;
149 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_close: invalid sion_filedesc, aborting %d ...\n", sid));
151 rc=_sion_close(sion_filedesc);
153 if(rc==SION_SUCCESS) {
155 _sion_free_filedesc(sion_filedesc);
181 int rc = SION_SUCCESS;
186 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
188 DPRINTFP((1,
"sion_get_current_location", -1,
"enter\n"));
195 DPRINTFP((1,
"sion_get_current_location", -1,
"leave\n"));
215 sion_int32 **mapping,
217 int rc = SION_SUCCESS;
222 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
224 DPRINTFP((1,
"sion_get_mapping", -1,
"enter\n"));
228 *mapping=sion_filedesc->
mapping;
232 *numfiles=sion_filedesc->
nfiles;
234 DPRINTFP((1,
"sion_get_mapping", -1,
"leave (mapping_size=%d)\n",*mapping_size));
251 DPRINTFP((1,
"sion_get_file_endianness", -1,
"enter (sid=%d)\n",sid));
255 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
258 DPRINTFP((1,
"sion_get_file_endianness", -1,
"leave (sid=%d)\n",sid));
260 return ((sion_filedesc->
endianness >> 8) & 1);
275 DPRINTFP((1,
"sion_endianness_swap_needed", -1,
"enter (sid=%d)\n",sid));
279 DPRINTFP((1,
"sion_endianness_swap_needed", -1,
"leave (swap_needed=%d)\n",
303 sion_int64 **sion_currentpos,
304 sion_int64 **sion_currentblocknr)
306 int rc = SION_SUCCESS;
311 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
313 DPRINTFP((1,
"sion_get_current_locations", -1,
"enter\n"));
315 *ntasks = sion_filedesc->
ntasks;
319 DPRINTFP((1,
"sion_get_current_locations", -1,
"leave\n"));
323 int sion_get_number_of_files(
int sid)
329 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
332 return (sion_filedesc->
nfiles);
335 int sion_get_filenumber(
int sid)
341 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
347 int sion_is_serial_opened(
int sid)
353 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
361 int sion_using_hints(
int sid)
367 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
373 sion_int64 sion_get_bytes_written(
int sid)
376 sion_int64 bytes=SION_SIZE_NOT_VALID;
381 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
396 sion_int64 sion_get_bytes_read(
int sid)
399 sion_int64 bytes=SION_SIZE_NOT_VALID;
404 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
433 size_t sion_fwrite(
const void *data,
size_t size,
size_t nitems,
int sid)
435 sion_int64 bytes_buffered, bytes_to_write, bbytes, bytes_left;
441 DPRINTFP((1,
"sion_fwrite", -1,
"enter size=%ld nitems=%ld\n",(
long) size, (
long) nitems));
445 return(
_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
450 bytes_to_write=size*nitems;
457 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
458 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
459 (
int) bytes_to_write, sid));
462 data_ptr=(
void *) data;
468 if (bbytes + bytes_to_write > bytes_left) {
474 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
475 "could not write data (%d bytes) to file (sid=%d) ...", (
int) bbytes, sid));
478 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
479 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
487 bytes_to_write-=bytes_buffered;
488 data_ptr+=bytes_buffered;
490 while(bytes_to_write>0) {
496 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
497 "could not write data (%d bytes) to file (sid=%d) ...", (
int) bbytes, sid));
500 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
501 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
509 bytes_to_write-=bytes_buffered;
510 data_ptr+=bytes_buffered;
513 bytes_to_write=size*nitems;
515 rc=(size_t) (size ? bytes_to_write / size : 0);
521 if(frc != bytes_to_write) {
522 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
523 "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (
int) bytes_to_write, (
int) frc, sid));
526 rc=(size_t) (size ? bytes_to_write / size : 0);
529 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));
535 DPRINTFP((1,
"sion_fwrite", -1,
"leave rc=%ld\n",(
long) rc));
553 size_t sion_fread(
void *data,
size_t size,
size_t nitems,
int sid) {
555 sion_int64 bytes, bread, bytes_left;
559 return(
_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
563 return(
_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid pointer, aborting %d ...\n", data));
569 bytes_left = sion_filedesc->
startpos +
574 DPRINTFP((1,
"sion_fread", -1,
"enter\n"));
575 DPRINTFP((4,
"sion_fread", -1,
" parameter size=%ld nitems=%ld\n",(
long) size,(
long) nitems));
583 if((sion_filedesc->
chunksize < bytes) || ((bytes_left < bytes) &&
584 (bytes_left != 0))) {
586 return(
_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"not enough bytes left in chunk, aborting (%ld < %ld) ...\n", bytes_left, bytes));
591 DPRINTFP((256,
"sion_fread", -1,
" _sion_file_read returns %ld\n",(
long) bread));
594 return (
size_t) (size ? bread / size : 0);
597 bread = size ? bread / size : 0;
602 DPRINTFP((4,
"sion_fread", -1,
" return value %ld\n",(
long) bread));
603 DPRINTFP((1,
"sion_fread", -1,
"leave\n"));
621 int sion_seek(
int sid,
int rank,
int currentblocknr, sion_int64 posinblk)
626 rc=
sion_seek_fp(sid,rank,currentblocknr,posinblk,&fileptr);
644 int sion_seek_fp(
int sid,
int rank,
int currentblocknr, sion_int64 posinblk, FILE **fileptr)
646 int rc = SION_SUCCESS;
649 DPRINTFP((1,
"sion_seek_fp", -1,
" enter seek with sid=%d\n", sid));
654 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_seek: invalid sion_filedesc, aborting %d ...\n", sid));
659 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));
670 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));
694 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 ...");
708 *fileptr=sion_filedesc->
fileptr->fileptr;
717 DPRINTFP((1,
"sion_seek_fp", -1,
"leave seek rc=%d\n",rc));
734 int rc = SION_NOT_SUCCESS;
740 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_feof: invalid sion_filedesc, aborting %d ...\n", sid));
743 DPRINTFP((8,
"sion_feof", -1,
"enter feof sid=%d currentpos=%15lld\n", sid, sion_filedesc->
currentpos));
751 DPRINTFP((16,
"sion_feof", -1,
752 " after flush sid=%d currentpos=%15lld maxpos= %lld startpos=%lld curblknr=%d\n",
758 DPRINTFP((16,
"sion_feof", -1,
" end of current block %d not reached sid=%d\n",
764 rc = _sion_apply_hints(sion_filedesc,SION_HINTS_FREE_TYPE_CHUNK);
771 rc = _sion_apply_hints(sion_filedesc,SION_HINTS_ACCESS_TYPE_CHUNK);
775 rc = SION_NOT_SUCCESS;
776 DPRINTFP((8,
"sion_feof", -1,
777 " end of block %d reached, skipping to next %lld -> %lld position=%lld gs=%lld sid=%d\n",
783 DPRINTFP((8,
"sion_feof", -1,
" end of last block %d reached sid=%d\n", sion_filedesc->
currentblocknr, sid));
788 DPRINTFP((8,
"sion_feof", -1,
"leave feof sid=%d currentpos=%15lld rc=%d\n", sid, sion_filedesc->
currentpos, rc));
820 sion_int64 bytes_avail=SION_SIZE_NOT_VALID;
825 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_bytes_avail_in_chunk: invalid sion_filedesc, aborting %d ...\n", sid));
834 bytes_avail = maxpos - sion_filedesc->
currentpos;
836 DPRINTFP((8,
"sion_bytes_avail_in_chunk", -1,
837 "leave sid=%d rank=%4d currentpos=%lld maxpos= %lld -> bytes to read %lld\n",
838 sid, sion_filedesc->
rank, sion_filedesc->
currentpos, maxpos, bytes_avail));
840 return (bytes_avail);
859 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_position: invalid sion_filedesc, aborting %d ...\n", sid));
869 int sion_set_fp_closed(
int sid)
871 int rc = SION_SUCCESS;
876 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_fp_closed: invalid sion_filedesc, aborting %d ...\n", sid));
882 int sion_set_second_fp(
int sid, FILE *secondfd)
884 int rc = SION_SUCCESS;
890 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
894 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));
908 int sion_unset_second_fp(
int sid)
910 int rc = SION_SUCCESS;
915 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
919 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));
926 int sion_optimize_fp_buffer(
int sid)
928 int rc = SION_SUCCESS;
933 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
937 if (sion_filedesc->
fpbuffer == NULL) {
938 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));
955 int rc = SION_SUCCESS;
960 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
979 sion_int64 byteswritten;
980 int rc = SION_SUCCESS;
984 return(
_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_ensure_free_space: invalid sion_filedesc, returning %d ...\n", sid));
987 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"enter ensure_free sid=%d bytes=%lld\n", sid, bytes));
990 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"invalid opened\n"));
991 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));
993 if (sion_filedesc->
fileptr == NULL) {
994 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"file not opened\n"));
995 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));
999 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"could not write %lld bytes, chunksize=%lld\n", bytes, sion_filedesc->
chunksize));
1000 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));
1005 DPRINTFP((16,
"_sion_ensure_free_space", -1,
1006 " after getpos sid=%d fileposition is %lld bytes=%lld\n", sid, sion_filedesc->
currentpos, bytes));
1010 DPRINTFP((16,
"_sion_ensure_free_space", -1,
1011 " sid=%d byteswritten(%lld) + new bytes (%lld) = %lld\n", sid, byteswritten, bytes, byteswritten + bytes));
1013 if ((byteswritten + bytes) > sion_filedesc->
chunksize) {
1018 DPRINTFP((8,
"_sion_ensure_free_space", -1,
1019 "leave ensure_free sid=%d fileposition is %lld bw+bytes=%lld <= chunksize=%lld (fsblksize=%d)\n",
1027 int sion_is_thread_safe() {
1028 #ifdef SION_PTHREADS 1029 return(SION_SUCCESS);
1031 return(SION_NOT_SUCCESS);
1046 int rc=SION_NOT_SUCCESS;
1048 *numbytes=SION_SIZE_NOT_VALID;
1049 *numfds=SION_SIZE_NOT_VALID;
1053 return(
_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_sizeof: invalid sion_filedesc, returning %d ...\n", sid));
1055 DPRINTFP((2,
"sion_get_sizeof", -1,
"enter sid=%d\n", sid));
1059 DPRINTFP((2,
"sion_get_sizeof", -1,
"leave sid=%d numbytes=%d numfds=%d\n", sid, *numbytes, *numfds));
1066 #define DFUNCTION "sion_dup" 1082 int sion_dup(
int sid,
int mode,
int rank, uint64_t key)
1084 int new_sid = SION_ID_NOT_VALID;
1089 return(
_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN,
"sion_dup: invalid sion_filedesc, returning %d ...\n", sid));
1091 DPRINTFP((8, DFUNCTION, -1,
"enter sid=%d\n", sid));
1094 DPRINTFP((8, DFUNCTION, -1,
"invalid opened\n"));
1095 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));
1098 new_sid=
_sion_dup(sid, mode, rank, key);
1100 DPRINTFP((8, DFUNCTION, -1,
"leave sid=%d new_sid=%d\n", sid, new_sid));
1107 #define DFUNCTION "sion_dedup" 1118 int rc = SION_SUCCESS;
1119 DPRINTFP((8, DFUNCTION, -1,
"enter sid=%d\n", sid));
1123 DPRINTFP((8, DFUNCTION, -1,
"leave sid=%d rc=%d\n", sid, rc));
1130 #define DFUNCTION "sion_lock_register_lock_callbacks" 1143 int rc = SION_SUCCESS;
1144 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
1146 rc=_sion_lock_register_lock_callbacks(lock,unlock,lock_data);
1148 DPRINTFP((8, DFUNCTION, -1,
"leave rc=%d\n", rc));
1154 #define DFUNCTION "sion_lock_user_callbacks_defined" 1162 int rc = SION_SUCCESS;
1163 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
1165 rc=_sion_lock_user_callbacks_defined();
1167 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_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_errorprint(int rc, int level, const char *format,...)
Internal SION error.
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.