Table of Contents
stropen, strclose, strdelete, strname, strseek - file-stream enhanced
utilities
#include <stdinc.h>
stream stropen(string filename, string mode)
void strclose(stream str)
void strdelete(stream str, bool scratch)
string strname(stream str)
bool strseek(stream str)
Descriptionstropen() opens a file by filename and associates a stream with
it, much like fopen(3) does. It has a few additional features: (1) existing
files cannot be opened for writing unless mode=w! (mode=a! is also permitted),
(2) names of form - map to stdin/stdout, depending on mode,
(3) names of
the form -num for some small num set up a stream to read/write file descriptor
num.
(4) With mode=s a file is opened in write-scratch mode. Whenever strclose
is called, the file is also deleted. When the filename does not start with
a "/", a unique temporary filename is automatically created.
(5) Output
file with the name "." (dot) are equivalent to a bit sink (/dev/null).
(6)
Input files that look like a URL (http://.., ftp://.. etc) are opened with
popen(3) and data directly passed back to the client
Note that fopen(3)
itself officially recognizes the following modes:r, w, a, r+, w+, a+.
strclose()
closes a stream, which is the recommended practice within NEMO (formally,
an exit from the program using exit(3) also closes all open files properly).
Each opened stream uses additional space in internal tables that are free'd
when strclose is called.
strdelete() deletes the file associated with the
stream str previously opened with stropen. If scratch is set TRUE it will
always delete the file, if set to FALSE the file must have been opened
in scratch mode to be deleted. This routine also clears the internal filetable,
that was used when stropen was called.
strname() returns the name of the
file that had been opened by stropen. Note it returns a pointer to an internal
static table, and should not be overwritten. See also scopy(3NEMO).
strseek
returns seekability of a stream. This is primarely useful for filestruct,
which might need to know if stream i/o can be optimized with deferred input.
CaveatsFiles that are given as URLs can easily cause confusion, because
a malformed or mistyped URL can give either no output or whatever the server
decides to return on non-existing names. Since this is often a webpage with
an error message, perfectly legal output, the client on the NEMO side
will get no error message.
% tsf http://bima.astro.umd.edu/nemo/test/p10-a
### Fatal error [tsf]: gethdr: bad magic: 20474
fopen(3)
, fclose(3)
, filestruct(3NEMO)
, strlib(3NEMO)
, getparam(3NEMO)
,
mstropen(3NEMO)
Joshua Barnes, Peter Teuben
~/src/kernel/io stropen.c, filesecret.c
23-jul-90 created Josh
5-oct-90 added strdelete and strname; man page written PJT
1-mar-91 fixed bug in stropen - improved doc PJT
19-may-92 added strseek - fixed verbosity in strdelete PJT
5-nov-93 added special "." filename mode for /dev/null pjt
22-mar-00 scratch files cannot exist, otherwise error pjt
9-dec-05 add simple ability to grab URL-based files PJT
Table of Contents