Blame extension/filefuncs.3am

Packit Service f629e6
.TH FILEFUNCS 3am "Jan 15 2013" "Free Software Foundation" "GNU Awk Extension Modules"
Packit Service f629e6
.SH NAME
Packit Service f629e6
filefuncs \- provide some file related functionality to gawk
Packit Service f629e6
.SH SYNOPSIS
Packit Service f629e6
.ft CW
Packit Service f629e6
@load "filefuncs"
Packit Service f629e6
.sp
Packit Service f629e6
result = chdir("/some/directory")
Packit Service f629e6
.sp
Packit Service f629e6
result = stat("/some/path", statdata [, follow])
Packit Service f629e6
.sp
Packit Service f629e6
flags = or(FTS_PHYSICAL, ...)
Packit Service f629e6
.br
Packit Service f629e6
result = fts(pathlist, flags, filedata)
Packit Service f629e6
.ft R
Packit Service f629e6
.SH DESCRIPTION
Packit Service f629e6
The
Packit Service f629e6
.I filefuncs
Packit Service f629e6
extension adds several functions that provide access to
Packit Service f629e6
file-related facilities.
Packit Service f629e6
.SS chdir()
Packit Service f629e6
The
Packit Service f629e6
.B chdir()
Packit Service f629e6
function is a direct hook to the
Packit Service f629e6
.IR chdir (2)
Packit Service f629e6
system call to change the current directory.
Packit Service f629e6
It returns zero
Packit Service f629e6
upon success or less than zero upon error.
Packit Service f629e6
In the latter case it updates
Packit Service f629e6
.BR ERRNO .
Packit Service f629e6
.SS stat()
Packit Service f629e6
The
Packit Service f629e6
.B stat()
Packit Service f629e6
function provides a hook into the
Packit Service f629e6
.IR stat (2)
Packit Service f629e6
system call.
Packit Service f629e6
It returns zero
Packit Service f629e6
upon success or less than zero upon error.
Packit Service f629e6
In the latter case it updates
Packit Service f629e6
.BR ERRNO .
Packit Service f629e6
By default, it uses
Packit Service f629e6
.IR lstat (2).
Packit Service f629e6
However, if passed a third argument, it uses
Packit Service f629e6
.IR stat (2),
Packit Service f629e6
instead.
Packit Service f629e6
.PP
Packit Service f629e6
In all cases, it clears the
Packit Service f629e6
.B statdata
Packit Service f629e6
array.
Packit Service f629e6
When the call is successful,
Packit Service f629e6
.B stat()
Packit Service f629e6
fills the
Packit Service f629e6
.B statdata
Packit Service f629e6
array with information retrieved from the filesystem, as follows:
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["name"]\fP
Packit Service f629e6
The name of the file.
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["dev"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_dev
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["ino"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_ino
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["mode"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_mode
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["nlink"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_nlink
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["uid"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_uid
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["gid"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_gid
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["size"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_size
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["atime"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_atime
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["mtime"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_mtime
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["ctime"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_ctime
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["rdev"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_rdev
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
This element is only present for device files.
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["major"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_major
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
This element is only present for device files.
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["minor"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_minor
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" .
Packit Service f629e6
This element is only present for device files.
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["blksize"]\fP
Packit Service f629e6
Corresponds to the
Packit Service f629e6
.I st_blksize
Packit Service f629e6
field in the
Packit Service f629e6
.IR "struct stat" ,
Packit Service f629e6
if this field is present on your system.
Packit Service f629e6
(It is present on all modern systems that we know of.)
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["pmode"]\fP
Packit Service f629e6
A human-readable version of the mode value, such as printed by
Packit Service f629e6
.IR ls (1).
Packit Service f629e6
For example, \fB"-rwxr-xr-x"\fP.
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["linkval"]\fP
Packit Service f629e6
If the named file is a symbolic link, this element will exist
Packit Service f629e6
and its value is the value of the symbolic link (where the
Packit Service f629e6
symbolic link points to).
Packit Service f629e6
.TP
Packit Service f629e6
\fBstatdata["type"]\fP
Packit Service f629e6
The type of the file as a string. One of
Packit Service f629e6
\fB"file"\fP,
Packit Service f629e6
\fB"blockdev"\fP,
Packit Service f629e6
\fB"chardev"\fP,
Packit Service f629e6
\fB"directory"\fP,
Packit Service f629e6
\fB"socket"\fP,
Packit Service f629e6
\fB"fifo"\fP,
Packit Service f629e6
\fB"symlink"\fP,
Packit Service f629e6
\fB"door"\fP,
Packit Service f629e6
or
Packit Service f629e6
\fB"unknown"\fP.
Packit Service f629e6
Not all systems support all file types.
Packit Service f629e6
.SS fts()
Packit Service f629e6
The
Packit Service f629e6
.B fts()
Packit Service f629e6
function provides a hook to the
Packit Service f629e6
.IR fts (3)
Packit Service f629e6
set of routines for traversing file hierarchies.
Packit Service f629e6
Instead of returning data about one file at a time in a stream,
Packit Service f629e6
it fills in a multi-dimensional array with data about each file and
Packit Service f629e6
directory encountered in the requested hierarchies.
Packit Service f629e6
.PP
Packit Service f629e6
The arguments are as follows:
Packit Service f629e6
.TP
Packit Service f629e6
.B pathlist
Packit Service f629e6
An array of filenames.  The element values are used; the index values are ignored.
Packit Service f629e6
.TP
Packit Service f629e6
.B flags
Packit Service f629e6
This should be the bitwise OR of one or more of the following
Packit Service f629e6
predefined flag values.  At least one of
Packit Service f629e6
.B FTS_LOGICAL
Packit Service f629e6
or
Packit Service f629e6
.B FTS_PHYSICAL
Packit Service f629e6
must be provided; otherwise
Packit Service f629e6
.B fts()
Packit Service f629e6
returns an error value and sets
Packit Service f629e6
.BR ERRNO .
Packit Service f629e6
.RS
Packit Service f629e6
.TP
Packit Service f629e6
.B FTS_LOGICAL
Packit Service f629e6
Do a ``logical'' file traversal, where the information returned for
Packit Service f629e6
a symbolic link refers to the linked-to file, and not to the
Packit Service f629e6
symbolic link itself.
Packit Service f629e6
This flag is mutually exclusive with
Packit Service f629e6
.BR FTS_PHYSICAL .
Packit Service f629e6
.TP
Packit Service f629e6
.B FTS_PHYSICAL
Packit Service f629e6
Do a ``physical'' file traversal, where the information returned for
Packit Service f629e6
a symbolic link refers to the symbolic link itself.
Packit Service f629e6
This flag is mutually exclusive with
Packit Service f629e6
.BR FTS_LOGICAL .
Packit Service f629e6
.TP
Packit Service f629e6
.B FTS_NOCHDIR
Packit Service f629e6
As a performance optimization, the
Packit Service f629e6
.IR fts (3)
Packit Service f629e6
routines change directory as they traverse a file hierarchy.
Packit Service f629e6
This flag disables that optimization.
Packit Service f629e6
.TP
Packit Service f629e6
.B FTS_COMFOLLOW
Packit Service f629e6
Immediately follow a symbolic link named in
Packit Service f629e6
.BR pathlist ,
Packit Service f629e6
whether or not
Packit Service f629e6
.B FTS_LOGICAL
Packit Service f629e6
is set.
Packit Service f629e6
.TP
Packit Service f629e6
.B FTS_SEEDOT
Packit Service f629e6
By default, the
Packit Service f629e6
.IR fts (3)
Packit Service f629e6
routines do not return entries for ``.'' and ``..''.
Packit Service f629e6
This option causes entries for ``..'' to also be included.
Packit Service f629e6
(The AWK extension always includes an entry for ``.'', see below.)
Packit Service f629e6
.TP
Packit Service f629e6
.B FTS_XDEV
Packit Service f629e6
During a traversal, do not cross onto a different mounted filesystem.
Packit Service f629e6
.RE
Packit Service f629e6
.TP
Packit Service f629e6
.B filedata
Packit Service f629e6
The
Packit Service f629e6
.B filedata
Packit Service f629e6
array is first cleared.
Packit Service f629e6
Then,
Packit Service f629e6
.B fts()
Packit Service f629e6
creates an element in
Packit Service f629e6
.B filedata
Packit Service f629e6
for every element in
Packit Service f629e6
.BR pathlist .
Packit Service f629e6
The index is the name of the directory or file given in
Packit Service f629e6
.BR pathlist .
Packit Service f629e6
The element for this index is itself an array.
Packit Service f629e6
There are two cases.
Packit Service f629e6
.RS
Packit Service f629e6
.TP
Packit Service f629e6
The path is a file.
Packit Service f629e6
In this case, the array contains two or three elements:
Packit Service f629e6
.RS
Packit Service f629e6
.TP
Packit Service f629e6
\fB"path"\fP
Packit Service f629e6
The full path to this file, starting from the ``root'' that was given
Packit Service f629e6
in the
Packit Service f629e6
.B pathlist
Packit Service f629e6
array.
Packit Service f629e6
.TP
Packit Service f629e6
\fB"stat"\fP
Packit Service f629e6
This element is itself an array, containing the same information as provided
Packit Service f629e6
by the
Packit Service f629e6
.B stat()
Packit Service f629e6
function described earlier for its
Packit Service f629e6
.B statdata
Packit Service f629e6
argument.
Packit Service f629e6
The element may not be present if
Packit Service f629e6
.IR stat (2)
Packit Service f629e6
for the file failed.
Packit Service f629e6
.TP
Packit Service f629e6
\fB"error"\fP
Packit Service f629e6
If some kind of error was encountered, the array will also
Packit Service f629e6
contain an element named \fB"error"\fP, which is a string describing the error.
Packit Service f629e6
.RE
Packit Service f629e6
.TP
Packit Service f629e6
The path is a directory.
Packit Service f629e6
In this case, the array contains one element for each entry in the directory.
Packit Service f629e6
If an entry is a file, that element is as for files, just described.
Packit Service f629e6
If the entry is a directory, that element is (recursively), an array describing
Packit Service f629e6
the subdirectory.
Packit Service f629e6
If
Packit Service f629e6
.B FTS_SEEDOT
Packit Service f629e6
was provided in the flags, then there will also be an element named
Packit Service f629e6
\fB".."\fP.  This element will be an array containing the data
Packit Service f629e6
as provided by
Packit Service f629e6
.BR stat() .
Packit Service f629e6
.sp
Packit Service f629e6
In addition, there will be an element whose index is \fB"."\fP.
Packit Service f629e6
This element is an array containing the same two or three elements
Packit Service f629e6
as for a file:
Packit Service f629e6
\fB"path"\fP,
Packit Service f629e6
\fB"stat"\fP,
Packit Service f629e6
and
Packit Service f629e6
\fB"error"\fP.
Packit Service f629e6
.RE
Packit Service f629e6
.PP
Packit Service f629e6
The
Packit Service f629e6
.B fts()
Packit Service f629e6
function returns 0 if there were no errors. Otherwise it returns \-1.
Packit Service f629e6
.SH NOTES
Packit Service f629e6
The AWK
Packit Service f629e6
.B fts()
Packit Service f629e6
extension does not exactly mimic the interface of the
Packit Service f629e6
.IR fts (3)
Packit Service f629e6
routines, choosing instead to provide an interface that is based
Packit Service f629e6
on associative arrays, which should be more comfortable to use from
Packit Service f629e6
an AWK program.  This includes the lack of a comparison function, since
Packit Service f629e6
.I gawk
Packit Service f629e6
already provides powerful array sorting facilities.  While an
Packit Service f629e6
.IR fts_read() \-like
Packit Service f629e6
interface could have been provided, this felt less natural than
Packit Service f629e6
simply creating a multi-dimensional array to represent the file
Packit Service f629e6
hierarchy and its information.
Packit Service f629e6
.PP
Packit Service f629e6
Nothing prevents AWK code from changing the predefined
Packit Service f629e6
.BI FTS_ xx
Packit Service f629e6
values, but doing so may cause strange results when
Packit Service f629e6
the changed values are passed to
Packit Service f629e6
.BR fts() .
Packit Service f629e6
.SH BUGS
Packit Service f629e6
There are many more file-related functions for which AWK
Packit Service f629e6
interfaces would be desirable.
Packit Service f629e6
.SH EXAMPLE
Packit Service f629e6
See
Packit Service f629e6
.B test/fts.awk
Packit Service f629e6
in the
Packit Service f629e6
.I gawk
Packit Service f629e6
distribution for an example.
Packit Service f629e6
.SH "SEE ALSO"
Packit Service f629e6
.IR "GAWK: Effective AWK Programming" ,
Packit Service f629e6
.IR fnmatch (3am),
Packit Service f629e6
.IR fork (3am),
Packit Service f629e6
.IR inplace (3am),
Packit Service f629e6
.IR ordchr (3am),
Packit Service f629e6
.IR readdir (3am),
Packit Service f629e6
.IR readfile (3am),
Packit Service f629e6
.IR revoutput (3am),
Packit Service f629e6
.IR rwarray (3am),
Packit Service f629e6
.IR time (3am).
Packit Service f629e6
.PP
Packit Service f629e6
.IR chdir (2),
Packit Service f629e6
.IR fts (3),
Packit Service f629e6
.IR stat (2).
Packit Service f629e6
.SH AUTHOR
Packit Service f629e6
Arnold Robbins,
Packit Service f629e6
.BR arnold@skeeve.com .
Packit Service f629e6
.SH COPYING PERMISSIONS
Packit Service f629e6
Copyright \(co 2012, 2013,
Packit Service f629e6
Free Software Foundation, Inc.
Packit Service f629e6
.PP
Packit Service f629e6
Permission is granted to make and distribute verbatim copies of
Packit Service f629e6
this manual page provided the copyright notice and this permission
Packit Service f629e6
notice are preserved on all copies.
Packit Service f629e6
.ig
Packit Service f629e6
Permission is granted to process this file through troff and print the
Packit Service f629e6
results, provided the printed document carries copying permission
Packit Service f629e6
notice identical to this one except for the removal of this paragraph
Packit Service f629e6
(this paragraph not being relevant to the printed manual page).
Packit Service f629e6
..
Packit Service f629e6
.PP
Packit Service f629e6
Permission is granted to copy and distribute modified versions of this
Packit Service f629e6
manual page under the conditions for verbatim copying, provided that
Packit Service f629e6
the entire resulting derived work is distributed under the terms of a
Packit Service f629e6
permission notice identical to this one.
Packit Service f629e6
.PP
Packit Service f629e6
Permission is granted to copy and distribute translations of this
Packit Service f629e6
manual page into another language, under the above conditions for
Packit Service f629e6
modified versions, except that this permission notice may be stated in
Packit Service f629e6
a translation approved by the Foundation.
Packit Service f629e6
.\" vim: set filetype=nroff :