4.7.1 Opening and closing binary files
As with standard Unix, a file must be opened before reading or
writing. However, we distinguish file handles for both cases.
Open a file for reading
Syntax | QDP_Reader *QDP_open_read(QDP_String *md, char *filename);
| Meaning | Opens a named file for reading and reads the file metadata.
| Example | QDP_Reader *infile;
QDP_String *file_xml = QDP_string_create();
infile = QDP_open_read(file_xml, filename);
|
|
The QDP_Reader
return value is the file handle used in
subsequent references to the file. A null return value signals an
error. The I/O system takes responsibility for allocating and freeing
space for the handle. It is assumed the user has preperly created the
QDP_String
that will hold the file metadata
so it can be read from the head of the file and inserted.
The volume format (see QDP_open_write
below) is autodetected,
so is not specified.
Open a file for writing
Syntax | QDP_Writer *QDP_open_write(QDP_String *md, char *filename, int volfmt);
| Meaning | Opens a named file for writing and writes the file metadata.
| Example | QDP_Writer *outfile;
QDP_String *file_xml = QDP_string_create();
QDP_string_set(file_xml, xml_string);
outfile = QDP_open_write(file_xml, filename, QDP_SINGLEFILE);
|
|
The QDP_Writer
return value is the file handle used in
subsequent references to the file. A null return value signals an
error. The I/O system takes responsibility for allocating and freeing
space for the handle. It is assumed the user has already created the
file metadata in file_xml
, so it can be written
at the head of the file. The volfmt
argument is either
QDP_SINGLEFILE
or QDP_MULTIFILE
.
QDP_SINGLEFILE
creates a single file for the output from all nodes
while QDP_MULTIFILE
creates one file per node.
Close an input file
Syntax | int QDP_close_read(QDP_Reader *reader);
| Meaning | Closes an input file.
| Example | QDP_close_read(reader);
|
|
Close an output file
Syntax | int QDP_close_write(QDP_Writer *writer);
| Meaning | Closes an output file.
| Example | QDP_close_write(writer);
|
|
In both cases the integer return value is 0 for success and 1 for failure.