16 #define _XOPEN_SOURCE 700 28 #include "sion_error_handler.h" 36 #include "sion_hints.h" 41 #include "sion_buddy_common.h" 44 sion_io_stat_t* sion_get_io_info_buddy(
int sid,
int roles,
int flag);
83 sion_int64 *globalskip,
84 sion_int64 *start_of_varheader,
85 sion_int64 **sion_chunksizes,
86 sion_int64 **sion_globalranks,
87 sion_int64 **sion_blockcount,
88 sion_int64 **sion_blocksizes ) {
89 int rc = SION_SUCCESS;
91 #ifdef SION_SERIAL_MASTER 97 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
99 DPRINTFP((1,
"sion_get_locations", -1,
"enter\n"));
101 #ifdef SION_SERIAL_MASTER 110 for (i = 0; i < sion_filedesc->
ntasks; i++) {
111 int lfile=sion_filedesc->
mapping[i*2+0];
112 int lrank=sion_filedesc->
mapping[i*2+1];
117 for (i = 0; i < sion_filedesc->
ntasks; i++) {
118 int lfile=sion_filedesc->
mapping[i*2+0];
119 int lrank=sion_filedesc->
mapping[i*2+1];
122 for (blknum = 0; blknum < sion_filedesc->
all_blockcount[i]; blknum++) {
130 *ntasks = sion_filedesc->
ntasks;
139 DPRINTFP((1,
"sion_get_locations", -1,
"leave\n"));
144 int _sion_close_sid(
int sid)
146 int rc = SION_SUCCESS;
151 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_close: invalid sion_filedesc, aborting %d ...\n", sid));
153 rc=_sion_close(sion_filedesc);
155 if(rc==SION_SUCCESS) {
157 _sion_free_filedesc(sion_filedesc);
183 int rc = SION_SUCCESS;
188 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
190 DPRINTFP((1,
"sion_get_current_location", -1,
"enter\n"));
197 DPRINTFP((1,
"sion_get_current_location", -1,
"leave\n"));
217 sion_int32 **mapping,
219 int rc = SION_SUCCESS;
224 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
226 DPRINTFP((1,
"sion_get_mapping", -1,
"enter\n"));
230 *mapping=sion_filedesc->
mapping;
234 *numfiles=sion_filedesc->
nfiles;
236 DPRINTFP((1,
"sion_get_mapping", -1,
"leave (mapping_size=%d)\n",*mapping_size));
253 DPRINTFP((1,
"sion_get_file_endianness", -1,
"enter (sid=%d)\n",sid));
257 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
260 DPRINTFP((1,
"sion_get_file_endianness", -1,
"leave (sid=%d)\n",sid));
262 return ((sion_filedesc->
endianness >> 8) & 1);
277 DPRINTFP((1,
"sion_endianness_swap_needed", -1,
"enter (sid=%d)\n",sid));
281 DPRINTFP((1,
"sion_endianness_swap_needed", -1,
"leave (swap_needed=%d)\n",
305 sion_int64 **sion_currentpos,
306 sion_int64 **sion_currentblocknr)
308 int rc = SION_SUCCESS;
313 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
315 DPRINTFP((1,
"sion_get_current_locations", -1,
"enter\n"));
317 *ntasks = sion_filedesc->
ntasks;
321 DPRINTFP((1,
"sion_get_current_locations", -1,
"leave\n"));
325 int sion_get_number_of_files(
int sid)
331 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
334 return (sion_filedesc->
nfiles);
337 int sion_get_filenumber(
int sid)
343 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
349 int sion_is_serial_opened(
int sid)
355 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
363 int sion_using_hints(
int sid)
369 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
375 sion_int64 sion_get_bytes_written(
int sid)
378 sion_int64 bytes=SION_SIZE_NOT_VALID;
382 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
398 sion_int64 sion_get_bytes_read(
int sid)
401 sion_int64 bytes=SION_SIZE_NOT_VALID;
405 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
425 return(sion_get_io_info_by_spec(sid,SION_ROLE_COLLECTOR|SION_ROLE_WRITER|SION_ROLE_NOWRITER,SION_GET_IO_INFO_FLAG_NONE));
430 sion_io_stat_t* sion_get_io_info_by_spec(
int sid,
int roles,
int flag) {
436 _sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid);
442 p=sion_get_io_info_buddy(sid,roles,flag);
466 size_t sion_fwrite(
const void *data,
size_t size,
size_t nitems,
int sid)
468 sion_int64 bytes_to_write, bbytes;
473 DPRINTFP((1,
"sion_fwrite", -1,
"enter size=%ld nitems=%ld\n",(
long) size, (
long) nitems));
477 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
482 bytes_to_write=size*nitems;
489 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
490 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
491 (
int) bytes_to_write, sid));
494 char *data_ptr=(
void *) data;
495 sion_int64 bytes_left = sion_filedesc->
chunksize -
500 if (bbytes + bytes_to_write > bytes_left) {
506 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
507 "could not write data (%d bytes) to file (sid=%d) ...", (
int) bbytes, sid));
510 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
511 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
518 sion_int64 bytes_buffered=
_sion_buffer_push(sion_filedesc,data_ptr,bytes_to_write);
519 bytes_to_write-=bytes_buffered;
520 data_ptr+=bytes_buffered;
522 while(bytes_to_write>0) {
528 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
529 "could not write data (%d bytes) to file (sid=%d) ...", (
int) bbytes, sid));
532 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
533 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
541 bytes_to_write-=bytes_buffered;
542 data_ptr+=bytes_buffered;
545 bytes_to_write=size*nitems;
547 rc=(size_t) (size ? bytes_to_write / size : 0);
553 if(frc != bytes_to_write) {
554 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
555 "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (
int) bytes_to_write, (
int) frc, sid));
558 rc=(size_t) (size ? bytes_to_write / size : 0);
561 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));
567 DPRINTFP((1,
"sion_fwrite", -1,
"leave rc=%ld\n",(
long) rc));
585 size_t sion_fread(
void *data,
size_t size,
size_t nitems,
int sid) {
587 sion_int64 bytes, bread, bytes_left;
591 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
595 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid pointer, aborting %d ...\n", data));
601 bytes_left = sion_filedesc->
startpos +
606 DPRINTFP((1,
"sion_fread", -1,
"enter\n"));
607 DPRINTFP((4,
"sion_fread", -1,
" parameter size=%ld nitems=%ld\n",(
long) size,(
long) nitems));
615 if((sion_filedesc->
chunksize < bytes) || ((bytes_left < bytes) &&
616 (bytes_left != 0))) {
618 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"not enough bytes left in chunk, aborting (%ld < %ld) ...\n", bytes_left, bytes));
623 DPRINTFP((256,
"sion_fread", -1,
" _sion_file_read returns %ld\n",(
long) bread));
626 return (
size_t) (size ? bread / size : 0);
629 bread = size ? bread / size : 0;
634 DPRINTFP((4,
"sion_fread", -1,
" return value %ld\n",(
long) bread));
635 DPRINTFP((1,
"sion_fread", -1,
"leave\n"));
653 int sion_seek(
int sid,
int rank,
int currentblocknr, sion_int64 posinblk)
658 rc=
sion_seek_fp(sid,rank,currentblocknr,posinblk,&fileptr);
676 int sion_seek_fp(
int sid,
int rank,
int currentblocknr, sion_int64 posinblk, FILE **fileptr)
678 int rc = SION_SUCCESS;
681 DPRINTFP((1,
"sion_seek_fp", -1,
" enter seek with sid=%d\n", sid));
686 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_seek: invalid sion_filedesc, aborting %d ...\n", sid));
691 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));
702 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));
726 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 ...");
740 *fileptr=sion_filedesc->
fileptr->fileptr;
749 DPRINTFP((1,
"sion_seek_fp", -1,
"leave seek rc=%d\n",rc));
766 int rc = SION_NOT_SUCCESS;
772 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_feof: invalid sion_filedesc, aborting %d ...\n", sid));
775 DPRINTFP((8,
"sion_feof", -1,
"enter feof sid=%d currentpos=%15lld\n", sid, sion_filedesc->
currentpos));
783 DPRINTFP((16,
"sion_feof", -1,
784 " after flush sid=%d currentpos=%15lld maxpos= %lld startpos=%lld curblknr=%d\n",
790 DPRINTFP((16,
"sion_feof", -1,
" end of current block %d not reached sid=%d\n",
796 _sion_apply_hints(sion_filedesc,SION_HINTS_FREE_TYPE_CHUNK);
803 _sion_apply_hints(sion_filedesc,SION_HINTS_ACCESS_TYPE_CHUNK);
807 rc = SION_NOT_SUCCESS;
808 DPRINTFP((8,
"sion_feof", -1,
809 " end of block %d reached, skipping to next %lld -> %lld position=%lld gs=%lld sid=%d\n",
815 DPRINTFP((8,
"sion_feof", -1,
" end of last block %d reached sid=%d\n", sion_filedesc->
currentblocknr, sid));
820 DPRINTFP((8,
"sion_feof", -1,
"leave feof sid=%d currentpos=%15lld rc=%d\n", sid, sion_filedesc->
currentpos, rc));
852 sion_int64 bytes_avail=SION_SIZE_NOT_VALID;
857 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_bytes_avail_in_chunk: invalid sion_filedesc, aborting %d ...\n", sid));
866 bytes_avail = maxpos - sion_filedesc->
currentpos;
868 DPRINTFP((8,
"sion_bytes_avail_in_chunk", -1,
869 "leave sid=%d rank=%4d currentpos=%lld maxpos= %lld -> bytes to read %lld\n",
870 sid, sion_filedesc->
rank, sion_filedesc->
currentpos, maxpos, bytes_avail));
872 return (bytes_avail);
891 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_position: invalid sion_filedesc, aborting %d ...\n", sid));
901 int sion_set_fp_closed(
int sid)
903 int rc = SION_SUCCESS;
908 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_fp_closed: invalid sion_filedesc, aborting %d ...\n", sid));
914 int sion_set_second_fp(
int sid, FILE *secondfd)
916 int rc = SION_SUCCESS;
922 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
926 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));
940 int sion_unset_second_fp(
int sid)
942 int rc = SION_SUCCESS;
947 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
951 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));
958 int sion_optimize_fp_buffer(
int sid)
960 int rc = SION_SUCCESS;
965 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
969 if (sion_filedesc->
fpbuffer == NULL) {
970 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));
987 int rc = SION_SUCCESS;
992 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
1011 sion_int64 byteswritten;
1012 int rc = SION_SUCCESS;
1016 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_ensure_free_space: invalid sion_filedesc, returning %d ...\n", sid));
1019 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"enter ensure_free sid=%d bytes=%lld\n", sid, bytes));
1022 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"invalid opened\n"));
1023 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));
1025 if (!sion_filedesc->
usecoll) {
1026 if (sion_filedesc->
fileptr == NULL) {
1027 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"file not opened\n"));
1028 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));
1033 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"could not write %lld bytes, chunksize=%lld\n", bytes, sion_filedesc->
chunksize));
1034 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));
1039 DPRINTFP((16,
"_sion_ensure_free_space", -1,
1040 " after getpos sid=%d fileposition is %lld bytes=%lld\n", sid, sion_filedesc->
currentpos, bytes));
1044 DPRINTFP((16,
"_sion_ensure_free_space", -1,
1045 " sid=%d byteswritten(%lld) + new bytes (%lld) = %lld\n", sid, byteswritten, bytes, byteswritten + bytes));
1047 if ((byteswritten + bytes) > sion_filedesc->
chunksize) {
1052 DPRINTFP((8,
"_sion_ensure_free_space", -1,
1053 "leave ensure_free sid=%d fileposition is %lld bw+bytes=%lld <= chunksize=%lld (fsblksize=%d)\n",
1061 int sion_is_thread_safe() {
1062 #ifdef SION_PTHREADS 1063 return(SION_SUCCESS);
1065 return(SION_NOT_SUCCESS);
1080 int rc=SION_NOT_SUCCESS;
1082 *numbytes=SION_SIZE_NOT_VALID;
1083 *numfds=SION_SIZE_NOT_VALID;
1087 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_sizeof: invalid sion_filedesc, returning %d ...\n", sid));
1089 DPRINTFP((2,
"sion_get_sizeof", -1,
"enter sid=%d\n", sid));
1093 DPRINTFP((2,
"sion_get_sizeof", -1,
"leave sid=%d numbytes=%d numfds=%d\n", sid, *numbytes, *numfds));
1100 #define DFUNCTION "sion_dup" 1116 int sion_dup(
int sid,
int mode,
int rank, uint64_t key)
1118 int new_sid = SION_ID_NOT_VALID;
1123 return(_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN,
"sion_dup: invalid sion_filedesc, returning %d ...\n", sid));
1125 DPRINTFP((8, DFUNCTION, -1,
"enter sid=%d\n", sid));
1128 DPRINTFP((8, DFUNCTION, -1,
"invalid opened\n"));
1129 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));
1132 new_sid=
_sion_dup(sid, mode, rank, key);
1134 DPRINTFP((8, DFUNCTION, -1,
"leave sid=%d new_sid=%d\n", sid, new_sid));
1141 #define DFUNCTION "sion_dedup" 1153 DPRINTFP((8, DFUNCTION, -1,
"enter sid=%d\n", sid));
1157 DPRINTFP((8, DFUNCTION, -1,
"leave sid=%d rc=%d\n", sid, rc));
1164 #define DFUNCTION "sion_lock_register_lock_callbacks" 1178 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
1180 rc=_sion_lock_register_lock_callbacks(lock,unlock,lock_data);
1182 DPRINTFP((8, DFUNCTION, -1,
"leave rc=%d\n", rc));
1188 #define DFUNCTION "sion_lock_user_callbacks_defined" 1197 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
1199 rc=_sion_lock_user_callbacks_defined();
1201 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.