SIONlib  2.0.0-rc.2
Scalable I/O library for parallel access to task-local files
sion_serial.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 #define _XOPEN_SOURCE 700
11 
12 #include <stdint.h>
13 #include <stdlib.h>
14 
15 #include "sion_common.h"
16 #include "sion_debug.h"
17 #include "sion_enums.h"
18 #include "sion_internal.h"
19 #include "sion_serial.h"
20 
22 {
23  sion_options *options = malloc(sizeof(sion_options));
24  if (options) {
25  *options = SION_OPTIONS_INIT;
26  }
27  return options;
28 }
29 
31 {
32  free(options);
33 }
34 
35 void sion_options_set_chunksizes(sion_options *options, int n, const int64_t chunksizes[])
36 {
37  options->chunksizes = chunksizes;
38  options->n_chunksizes = n;
39 }
40 
41 void sion_options_set_fsblksize(sion_options *options, int32_t fsblksize)
42 {
43  options->fsblksize = fsblksize;
44 }
45 
47 {
48  options->keyval_mode = keyval_mode;
49 }
50 
52 {
53  options->lowlevel_api = lowlevel_api;
54 }
55 
57 {
58  options->endianness = endianness;
59 }
60 
61 int sion_open(const char *fname, sion_open_mode mode, int n, const sion_options *options_)
62 {
63  sion_options options = (options_) ? *options_ : SION_OPTIONS_INIT;
64 
65  // FIXME re-enable debug output of file_mode
66  // DPRINTFP((1, __func__, 0, "enter open of file %s in %s mode\n", fname, file_mode));
67  DPRINTFP((1, __func__, 0, "enter open of file %s\n", fname));
68  int sid = (mode == SION_OPEN_WRITE) ? _sion_open_write(fname, n, &options)
69  : _sion_open_read(fname, _SION_READ_ALL_OF_MULTI_FILES, &options);
70 
71  // FIXME re-enable debug output of file_mode
72  // DPRINTFP((1, __func__, 0, "leave open of file %s in %s mode sid=%d\n", fname, file_mode,sid));
73  DPRINTFP((1, __func__, 0, "leave open of file %s sid=%d\n", fname, sid));
74 
75  return sid;
76 }
77 
79 {
80  sion_rank_options *options = malloc(sizeof(sion_rank_options));
81  if (options) {
82  *options = SION_RANK_OPTIONS_INIT;
83  }
84  return options;
85 }
86 
88 {
89  free(options);
90 }
91 
93 {
94  options->lowlevel_api = lowlevel_api;
95 }
96 
97 int sion_open_rank(const char *fname, sion_open_mode mode, int rank, const sion_rank_options *options)
98 {
99  return _sion_open_rank(fname, mode, rank, (options) ? options : &SION_RANK_OPTIONS_INIT);
100 }
101 
102 int sion_close(int sid)
103 {
104  int rc = 0;
105  DPRINTFP((1, "sion_close", -1, "enter close sid=%d\n", sid));
106  rc = _sion_close_sid(sid);
107  DPRINTFP((1, "sion_close", -1, "leave close sid=%d\n", sid));
108 
109  sion_dclose();
110 
111  return rc;
112 }
sion_lowlevel_api
specifies a low-level API to use for file system access
Definition: sion_enums.h:19
void sion_rank_options_delete(sion_rank_options *options)
Delete an instance of sion_rank_options
Definition: sion_serial.c:87
void sion_options_set_endianness(sion_options *options, sion_endianness endianness)
Set the endianness for the contents of a container.
Definition: sion_serial.c:56
sion_rank_options * sion_rank_options_new(void)
Allocates and initializes an instance of sion_rank_options
Definition: sion_serial.c:78
int sion_close(int sid)
Close a SIONlib file.
Definition: sion_serial.c:102
void sion_options_set_lowlevel_api(sion_options *options, sion_lowlevel_api lowlevel_api)
Set the low-level API to use for opening a container.
Definition: sion_serial.c:51
void sion_options_delete(sion_options *options)
Delete an instance of sion_options
Definition: sion_serial.c:30
void sion_options_set_keyval_mode(sion_options *options, sion_keyval_mode keyval_mode)
Set the key-value mode to use for a container.
Definition: sion_serial.c:46
struct sion_options sion_options
Holds non-essential arguments for sion_open().
Definition: sion_serial.h:33
int sion_open_rank(const char *fname, sion_open_mode mode, int rank, const sion_rank_options *options)
Open a single logical file in a SIONlib container.
Definition: sion_serial.c:97
int sion_open(const char *fname, sion_open_mode mode, int n, const sion_options *options_)
Open a SIONlib container in serial mode.
Definition: sion_serial.c:61
sion_options * sion_options_new(void)
Allocates and initializes an instance of sion_options
Definition: sion_serial.c:21
sion_keyval_mode
specifies whether to use SIONlib's key-value mechanism for accessing file content and if so in what m...
Definition: sion_enums.h:35
void sion_options_set_chunksizes(sion_options *options, int n, const int64_t chunksizes[])
Set the chunk sizes of all logical files in the container.
Definition: sion_serial.c:35
sion_endianness
declares the endianness of user data written to a file
Definition: sion_enums.h:63
sion_open_mode
specifies for what type of access to open a file
Definition: sion_enums.h:27
void sion_options_set_fsblksize(sion_options *options, int32_t fsblksize)
Set the file system block size to assume.
Definition: sion_serial.c:41
open the file for writing only
Definition: sion_enums.h:31
void sion_rank_options_set_lowlevel_api(sion_rank_options *options, sion_lowlevel_api lowlevel_api)
Set the low-level API to use for opening a container.
Definition: sion_serial.c:92
struct sion_rank_options sion_rank_options
Holds non-essential arguments for sion_open_rank().
Definition: sion_serial.h:38