#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
~/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