Table of Contents

Name

stropen, strclose, strdelete, strname, strseek - file-stream enhanced utilities

Synopsis


#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

See Also

fopen(3) , fclose(3) , filestruct(3NEMO) , strlib(3NEMO) , getparam(3NEMO) , mstropen(3NEMO)

Author

Joshua Barnes, Peter Teuben

Files


~/src/kernel/io      stropen.c, filesecret.c

Update History


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