This HTML automatically generated with rman for NEMO
Table of Contents


root, extension, head, tail, defext, pathopen, pathfind, _mappath, fexist - file operations


#include <stdinc.h>#include <filefn.h>string root(filename)string extension(filename)string
head(filename)string tail(filename)string fullname(filename)
string defext(filename,ext)stream
pathopen(path, filename, mode)string pathfind(path, filename)string _mappath(fn,
path, filename, arg)bool fexist(filename)
string filename, ext, mode, path;
first four functions  root(), extension(), head(), and tail(), returns
a component of a file name and are equivalent to the C shell substitution
characters :r, :e, :h, and :t, respectively.  fullname() returns the full
name of a file, making it easier to find the file again if the user used
chdir(2) during the program. 
defext() adds an extension to a file name if
none already exists.  Alternatively, if the extension field ext begins with
a *, any old extension in filename is replaced with the given extension.
     defext(filename, ".xxx")   --  add .xxx if no ext       
     defext(filename, "*.xxx")  --  force .xxx as ext        
Note: defext returns a pointer to dynamically-allocated string storage which is never freed. This is necessary to ensure safety on multiple calls in a single statement.

pathopen() is used to open files using a search path similar to that used, for example, by csh in searching for a command. The pathopen routine has the same structure as fopen(3) and the filename and mode arguments are the same as in that call. The path argument consists of a list of directories which are prepended to the filename, unless the filename begins with either a / or a ~. The directories in the list are separated by colons as in the definition of the PATH environment variable. White space and empty fields are ignored to simplify formatting of paths in a definition file.

After each directory name has been added, the pathopen performs ~ (tilde) expansion in the same form as csh. The path argument may be NULL, in which case no directories are prepended. This is useful if ~ expansion is the only required function.

pathopen() returns an open stream to the indicated file, or NULL, if no existing file is found.

pathfind() is similar to pathopen, except that it does not try to open the file but instead returns the full name of the first file that exists along the path, or NULL if none exist.

_mappath() maps the string function fn over each path/filename combination, stopping when fn(name, arg) returns non-null. That value is returned. If the function always returns a NULL value for each element in the path, NULL is returned from _mappath.

fexist returns TRUE if the file exists, and FALSE if not. By default NEMO’s stropen(3NEMO) will fail on read if the file does not exist, and fail on write if the file exist, so this function is rarely needed.


Eric Roberts


~/src/kernel/cores    filefn.c


11-jan-86    Last modified       Roberts
6-dec-86    Fixed some bugs and updated for Nemo    Josh
6-oct-90    Manual page written    Peter
17-mar-06    added fullname    Peter
17-jan-2023    added fexist    Peter

Table of Contents