source: rtems/doc/new_chapters/confspace.t @ 08142b48

4.104.114.84.95
Last change on this file since 08142b48 was 08142b48, checked in by Wade A Smith <warm38@…>, on 09/12/98 at 15:57:18

Documented the following routines added to the Configuration Space
Management: readdir, open, umask, link, mkdir, unlink, chmod, and chown.,

  • Property mode set to 100644
File size: 41.5 KB
RevLine 
[832e33c]1@c
2@c  COPYRIGHT (c) 1988-1998.
3@c  On-Line Applications Research Corporation (OAR).
4@c  All rights reserved.
5@c
6@c  $Id$
7@c
8
9@chapter Configuration Space Manager
10
11@section Introduction
12
[d1a859c]13The configuration space manager provides a portable
14interface for manipulating configuration data.
15The capabilities in this manager were defined in the POSIX
161003.1h/D3 proposed standard titled @b{Services for Reliable,
17Available, and Serviceable Systems}.
[832e33c]18
19The directives provided by the configuration space manager are:
20
21@itemize @bullet
[16bed8a]22@item @code{cfg_mount} - Mount a Configuration Space
[e6bfa70]23@item @code{cfg_unmount} - Unmount a Configuration Space
24@item @code{cfg_mknod} - Create a Configuration Node
25@item @code{cfg_get} - Get Configuration Node Value
26@item @code{cfg_set} - Set Configuration Node Value
27@item @code{cfg_link} - Create a Configuration Link
28@item @code{cfg_unlink} - Remove a Configuration Link
29@item @code{cfg_open} - Open a Configuration Space
30@item @code{cfg_read} - Read a Configuration Space
31@item @code{cfg_children} - Get Node Entries
32@item @code{cfg_mark} - Set Configuration Space Option
[08142b48]33@item @code{readdir} - Reads a directory
34@item @code{umask} - Sets a file creation mask
35@item @code{link} - Creates a link to a file
36@item @code{unlink} - Removes a directory entry
37@item @code{mkdir} - Makes a directory
38@item @code{open} - Opens a file
39@item @code{chmod} - Changes file mode
40@item @code{chown} - Changes the owner and/or group of a file
[832e33c]41@end itemize
42
43@section Background
44
[571a915]45@subsection Configuration Nodes
46
47@subsection Configuration Space
48
[c7cb6bbb]49@subsection Format of a Configuration Space File
50
[832e33c]51@section Operations
52
[571a915]53@subsection Mount and Unmounting
54
55@subsection Creating a Configuration Node
56
57@subsection Removing a Configuration Node
58
59@subsection Manipulating a Configuration Node
60
61@subsection Traversing a Configuration Space
62
[832e33c]63@section Directives
64
65This section details the configuration space manager's directives.
66A subsection is dedicated to each of this manager's directives
67and describes the calling sequence, related constants, usage,
68and status codes.
69
70@page
[16bed8a]71@subsection cfg_mount - Mount a Configuration Space
[832e33c]72
73@subheading CALLING SEQUENCE:
74
75@ifset is-C
76@example
[3e6eb1dd]77#include <cfg.h>
78
[832e33c]79int cfg_mount(
[16bed8a]80  const char     *file,
81  const char     *cfgpath,
82  log_facility_t  notification,
[832e33c]83);
84@end example
85@end ifset
86
87@ifset is-Ada
88@end ifset
89
90@subheading STATUS CODES:
91
[16bed8a]92@table @b
93@item EPERM
94The caller does not have the appropriate privilege.
[d1a859c]95
[e6bfa70]96@item EACCES
97Search permission is denied for a component of the path prefix.
[d1a859c]98
[e6bfa70]99@item EEXIST
100The file specified by the file argument does not exist
[d1a859c]101
[e6bfa70]102@item ENAMETOOLONG
[d5ef5bd1]103A component of a pathname exceeded @code{NAME_MAX} characters,
104or an entire path name exceed @code{PATH_MAX} characters while
105@code{_POSIX_NO_TRUNC} is in effect.
[d1a859c]106
[e6bfa70]107@item ENOENT
108A component of cfgpath does not exist.
[d1a859c]109
[e6bfa70]110@item ENOTDIR
111A component of the file path prefix is not a directory.
[d1a859c]112
[e6bfa70]113@item EBUSY
114The configuration space defined by file is already mounted.
[d1a859c]115
[e6bfa70]116@item EINVAL
117The notification argument specifies an invalid log facility.
[16bed8a]118
119@end table
120
[832e33c]121@subheading DESCRIPTION:
[df8d3601]122
[d1a859c]123The @code{cfg_mount} function maps a configuration space defined
124by the file identified by the the @code{file} argument.  The
125distinguished node of the mapped configuration space shall be
[a99ea16]126mounted in the active space at the point identified by the
[d1a859c]127@code{cfgpath} configuration pathname.
128
129The @code{notification} argument specifies how changes to the
130mapped configuration space shall be communicated to the application.
131If the @code{notification} argument is NULL, no notification shall
132be performed for the mapped configuration space.  If the Event
133Logging option is defined, the notification argument defines the
134facility to which changes in the mapped configuration space shall
135be logged.  Otherwise, the @code{notification} argument shall
136specify an implementation defined method of notifying the application
137of changes to the mapped configuration space.
[832e33c]138
139@subheading NOTES:
140
[d1a859c]141The @code{_POSIX_CFG} feature flag is defined to indicate
142this service is available.
143
[832e33c]144@page
[e6bfa70]145@subsection cfg_unmount - Unmount a Configuration Space
[832e33c]146
147@subheading CALLING SEQUENCE:
148
149@ifset is-C
150@example
[3e6eb1dd]151#include <cfg.h>
152
[832e33c]153int cfg_unmount(
[e6bfa70]154  const char     *cfgpath
[832e33c]155);
156@end example
157@end ifset
158
159@ifset is-Ada
160@end ifset
161
162@subheading STATUS CODES:
163
[16bed8a]164@table @b
[e6bfa70]165@item EPERM
166The caller does not have the appropriate privileges.
[d1a859c]167
[e6bfa70]168@item EACCES
169Search permission is denied for a component of the path prefix.
[d1a859c]170
[e6bfa70]171@item ENOENT
172A component of cfgpath does not exist.
[d1a859c]173
[e6bfa70]174@item ENAMETOOLONG
[d5ef5bd1]175A component of a pathname exceeded @code{NAME_MAX} characters,
176or an entire path name exceed @code{PATH_MAX} characters while
177@code{_POSIX_NO_TRUNC} is in effect.
[d1a859c]178
[e6bfa70]179@item EINVAL
180The requested node is not the distinguished node of a mounted
181configuration space.
[d1a859c]182
[e6bfa70]183@item EBUSY
184One or more processes has an open configuration traversal
185stream for the configuration space whose distinguished node is
186referenced by the cfgpath argument.
[d1a859c]187
[e6bfa70]188@item ELOOP
189A node appears more than once in the path specified by the
190cfg_path argument
[d1a859c]191
[e6bfa70]192@item ELOOP
[d5ef5bd1]193More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]194resolution of the cfgpath argument
[16bed8a]195
196@end table
197
[832e33c]198@subheading DESCRIPTION:
199
[d1a859c]200The @code{cfg_umount} function unmaps the configuration space whose
201distinguished node is mapped in the active space at the location defined
[a99ea16]202by @code{cfgpath} configuration pathname.  All system resources
[d1a859c]203allocated for this configuration space should be deallocated.
[e6bfa70]204
[832e33c]205@subheading NOTES:
206
[d1a859c]207The @code{_POSIX_CFG} feature flag is defined to indicate
208this service is available.
209
[832e33c]210@page
[a99ea16]211@subsection cfg_mknod - Create a Configuration Node
[832e33c]212
213@subheading CALLING SEQUENCE:
214
215@ifset is-C
216@example
[3e6eb1dd]217#include <cfg.h>
218
[832e33c]219int cfg_mknod(
[e6bfa70]220  const char   *cfgpath,
221  mode_t        mode,
222  cfg_type_t    type         
[832e33c]223);
224@end example
225@end ifset
226
227@ifset is-Ada
228@end ifset
229
230@subheading STATUS CODES:
231
[16bed8a]232@table @b
[e6bfa70]233@item ENAMETOOLONG
[d5ef5bd1]234A component of a pathname exceeded @code{NAME_MAX} characters,
235or an entire path name exceed @code{PATH_MAX} characters while
236@code{_POSIX_NO_TRUNC} is in effect.
[d1a859c]237
[e6bfa70]238@item ENOENT
[a99ea16]239A component of the path prefix does not exist.
[d1a859c]240
[e6bfa70]241@item EACCES
242Search permission is denied for a component of the path prefix.
[d1a859c]243
[e6bfa70]244@item ELOOP
245Too many symbolic links were encountered in translating the
246pathname.
[d1a859c]247
[e6bfa70]248@item EPERM
249The calling process does not have the appropriate privilege.
[d1a859c]250
[e6bfa70]251@item EEXIST
252The named node exists.
[d1a859c]253
[e6bfa70]254@item EINVAL
255The value of mode is invalid.
[d1a859c]256
[e6bfa70]257@item EINVAL
258The value of type is invalid.
[d1a859c]259
[e6bfa70]260@item ELOOP
261A node appears more than once in the path specified by the
262cfg_path argument
[d1a859c]263
[e6bfa70]264@item ELOOP
[d5ef5bd1]265More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]266resolution of the cfgpath argument.
[d1a859c]267
[e6bfa70]268@item EROFS
269The named node resides on a read-only configuration space.
[16bed8a]270
271@end table
272
[832e33c]273@subheading DESCRIPTION:
274
[d1a859c]275The @code{cfg_mknod} function creates a new node in the configuration
276space which contains the pathname prefix of @code{cfgpath}.  T he node
277name shall be defined by the pathname suffix of @code{cfgpath}.  The
278node name shall be defined by the pathname suffix of @code{cfgpath}.
279The node permissions shall be specified by the value of @code{mode}.
280The node type shall be specified by the value of @code{type}.
[e6bfa70]281
[832e33c]282@subheading NOTES:
283
[d1a859c]284The @code{_POSIX_CFG} feature flag is defined to indicate
285this service is available.
286
[832e33c]287@page
[e6bfa70]288@subsection cfg_get - Get Configuration Node Value
[832e33c]289
290@subheading CALLING SEQUENCE:
291
292@ifset is-C
293@example
[3e6eb1dd]294#include <cfg.h>
295
[832e33c]296int cfg_get(
[e6bfa70]297  const char  *cfgpath
298  cfg_value_t *value
[832e33c]299);
300@end example
301@end ifset
302
303@ifset is-Ada
304@end ifset
305
306@subheading STATUS CODES:
307
[16bed8a]308@table @b
[e6bfa70]309@item ENAMETOOLONG
[d5ef5bd1]310A component of a pathname exceeded @code{NAME_MAX} characters,
311or an entire path name exceed @code{PATH_MAX} characters while
312@code{_POSIX_NO_TRUNC} is in effect.
[d1a859c]313
[e6bfa70]314@item ENOENT
315A component of cfgpath does not exist.
[d1a859c]316
[e6bfa70]317@item EACCES
318Search permission is denied for a component of the path prefix.
[d1a859c]319
[e6bfa70]320@item EPERM
[a99ea16]321The calling process does not have the appropriate privileges.
[d1a859c]322
[e6bfa70]323@item ELOOP
324A node appears more than once in the path specified by the
325cfg_path argument
[d1a859c]326
[e6bfa70]327@item ELOOP
[d5ef5bd1]328More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]329resolution of the cfgpath argument.
[16bed8a]330
331@end table
332
[832e33c]333@subheading DESCRIPTION:
334
[d1a859c]335The @code{cfg_get} function stores the value attribute of the
336configuration node identified by @code{cfgpath}, into the buffer
337described by the @code{value} pointer.
[e6bfa70]338
[832e33c]339@subheading NOTES:
340
[d1a859c]341The @code{_POSIX_CFG} feature flag is defined to indicate
342this service is available.
343
[832e33c]344@page
[e6bfa70]345@subsection cfg_set - Set Configuration Node Value
[832e33c]346
347@subheading CALLING SEQUENCE:
348
349@ifset is-C
350@example
[3e6eb1dd]351#include <cfg.h>
352
[832e33c]353int cfg_set(
[e6bfa70]354  const char  *cfgpath
355  cfg_value_t *value
[832e33c]356);
357@end example
358@end ifset
359
360@ifset is-Ada
361@end ifset
362
363@subheading STATUS CODES:
364
[16bed8a]365@table @b
[e6bfa70]366@item ENAMETOOLONG
[d5ef5bd1]367A component of a pathname exceeded @code{NAME_MAX} characters,
368or an entire path name exceed @code{PATH_MAX} characters while
369@code{_POSIX_NO_TRUNC} is in effect.
[d1a859c]370
[e6bfa70]371@item ENOENT
372A component of cfgpath does not exist
[d1a859c]373
[e6bfa70]374@item EACCES
375Search permission is denied for a component of the path prefix.
[d1a859c]376
[e6bfa70]377@item EPERM
378The calling process does not have the appropriate privilege.
[d1a859c]379
[e6bfa70]380@item ELOOP
381A node appears more than once in the path specified by the
382cfg-path argument.
[d1a859c]383
[e6bfa70]384@item ELOOP
[d5ef5bd1]385More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]386resolution of the cfgpath argument.
[16bed8a]387
388@end table
389
[832e33c]390@subheading DESCRIPTION:
391
[d1a859c]392The @code{cfg_set} function stores the value specified by the
393@code{value} argument in the configuration node defined by the
394@code{cfgpath} argument.
[e6bfa70]395
[832e33c]396@subheading NOTES:
397
[d1a859c]398The @code{_POSIX_CFG} feature flag is defined to indicate
399this service is available.
400
[832e33c]401@page
[e6bfa70]402@subsection cfg_link - Create a Configuration Link
[832e33c]403
404@subheading CALLING SEQUENCE:
405
406@ifset is-C
407@example
[3e6eb1dd]408#include <cfg.h>
409
[832e33c]410int cfg_link(
[e6bfa70]411  const char *src
412  const char *dest
[832e33c]413);
414@end example
415@end ifset
416
417@ifset is-Ada
418@end ifset
419
420@subheading STATUS CODES:
421
[16bed8a]422@table @b
[e6bfa70]423@item ENAMETOOLONG
[d5ef5bd1]424A component of a pathname exceeded @code{NAME_MAX} characters,
425or an entire path name exceed @code{PATH_MAX} characters while
426@code{_POSIX_NO_TRUNC} is in effect.
[d1a859c]427
[e6bfa70]428@item ENOENT
429A component of either path prefix does not exist.
[d1a859c]430
[e6bfa70]431@item EACCES
432A component of either path prefix denies search permission.
[d1a859c]433
[e6bfa70]434@item EACCES
435The requested link requires writing in a node with a mode that
436denies write permission.
[d1a859c]437
[e6bfa70]438@item ENOENT
439The node named by src does not exist.
[d1a859c]440
[e6bfa70]441@item EEXIST
442The node named by dest does exist.
[d1a859c]443
[e6bfa70]444@item EPERM
445The calling process does not have the appropriate privilege to
446modify the node indicated by the src argument.
[d1a859c]447
[e6bfa70]448@item EXDEV
449The link named by dest and the node named by src are from different
450configuration spaces.
[d1a859c]451
[e6bfa70]452@item ENOSPC
[a99ea16]453The node in which the entry for the new link is being placed
[e6bfa70]454cannot be extended because there is no space left on the
455configuration space containing the node.
[d1a859c]456
[e6bfa70]457@item EIO
458An I/O error occurred while reading from or writing to the
459configuration space to make the link entry.
[d1a859c]460
[e6bfa70]461@item EROFS
462The requested link requires writing in a node on a read-only
463configuration space.
[d1a859c]464
[e6bfa70]465@item ELOOP
466A node appears more than once in the path specified by the
467cfg-path argument.
[d1a859c]468
[e6bfa70]469@item ELOOP
[d5ef5bd1]470More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]471resolution of the cfgpath argument.
[16bed8a]472
473@end table
474
[832e33c]475@subheading DESCRIPTION:
476
[a99ea16]477The @code{src} and @code{dest}arguments point to pathnames which
[d1a859c]478name existing nodes.  The @code{cfg_link} function shall atomically
479create a link between specified nodes, and increment by one the link
480count of the node specified by the @code{src} argument.
[9886290]481
[d1a859c]482If the @code{cfg_link} function fails, no link shall be created, and
483the link count of the node shall remain unchanged by this function
484call.
[9886290]485
[d1a859c]486This implementation may require that the calling process has permission
487to access the specified nodes.
[e6bfa70]488
[832e33c]489@subheading NOTES:
490
[d1a859c]491The @code{_POSIX_CFG} feature flag is defined to indicate
492this service is available.
493
[832e33c]494@page
[e6bfa70]495@subsection cfg_unlink - Remove a Configuration Link
[832e33c]496
497@subheading CALLING SEQUENCE:
498
499@ifset is-C
500@example
[3e6eb1dd]501#include <cfg.h>
502
[832e33c]503int cfg_unlink(
[e6bfa70]504  const char    *cfgpath
[832e33c]505);
506@end example
507@end ifset
508
509@ifset is-Ada
510@end ifset
511
512@subheading STATUS CODES:
513
[16bed8a]514@table @b
[e6bfa70]515@item ENAMETOOLONG
[d5ef5bd1]516A component of a pathname exceeded @code{NAME_MAX} characters,
517or an entire path name exceed @code{PATH_MAX} characters.
[d1a859c]518
[e6bfa70]519@item ENOENT
520The named  node does not exist.
[d1a859c]521
[e6bfa70]522@item EACCES
523Search permission is denied on the node containing the link to
524be removed.
[d1a859c]525
[e6bfa70]526@item EACCES
527Write permission is denied on the node containing the link to
528be removed.
[d1a859c]529
[e6bfa70]530@item ENOENT
531A component of cfgpath does not exist.
[d1a859c]532
[e6bfa70]533@item EPERM
[a99ea16]534The calling process does not have the appropriate privilege to
[e6bfa70]535modify the node indicated by the path prefix of the cfgpath
536argument.
[d1a859c]537
[e6bfa70]538@item EBUSY
539The node to be unlinked is the distinguished node of a mounted
540configuration space.
[d1a859c]541
[e6bfa70]542@item EIO
543An I/O error occurred while deleting the link entry or deallocating
544the node.
[d1a859c]545
[e6bfa70]546@item EROFS
[a99ea16]547The named node resides in a read-only configuration space.
[d1a859c]548
[e6bfa70]549@item ELOOP
550A node appears more than once in the path specified by the
551cfg-path argument.
[d1a859c]552
[e6bfa70]553@item ELOOP
[d5ef5bd1]554More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]555resolution of the cfgpath argument.
[16bed8a]556
557@end table
558
[832e33c]559@subheading DESCRIPTION:
560
[d1a859c]561The @code{cfg_unlink} function removes the link between the node
562specified by the @code{cfgpath} path prefix and the parent node
[a99ea16]563specified by @code{cfgpath}, and shall decrement the link count
[d1a859c]564of the @code{cfgpath} node.
[df8d3601]565
[d1a859c]566When the link count of the node becomes zero, the space occupied
567by the node shall be freed and the node shall no longer be accessible.
[9886290]568
[832e33c]569@subheading NOTES:
570
[d1a859c]571The @code{_POSIX_CFG} feature flag is defined to indicate
572this service is available.
573
[832e33c]574@page
[e6bfa70]575@subsection cfg_open - Open a Configuration Space
[832e33c]576
577@subheading CALLING SEQUENCE:
578
579@ifset is-C
580@example
[3e6eb1dd]581#include <cfg.h>
582
[832e33c]583int cfg_open(
[e6bfa70]584  const char     *pathnames[],
585  int             options,
586  int           (*compar)(const CFGENT **f1, const CFGENT **f2),
[a99ea16]587  CFG           **cfgstream
[832e33c]588);
589@end example
590@end ifset
591
592@ifset is-Ada
593@end ifset
594
595@subheading STATUS CODES:
596
[16bed8a]597@table @b
[e6bfa70]598@item EACCES
599Search permission is denied for any component of a pathname.
[d1a859c]600
[e6bfa70]601@item ELOOP
602A loop exists in symbolic links encountered during resolution
603of a pathname.
[d1a859c]604
[e6bfa70]605@item ENAMETOOLONG
[d5ef5bd1]606The length of a pathname exceeds @code{PATH_MAX}, or a pathname
607component is longer than @code{NAME_MAX} while @code{_POSIX_NO_TRUNC}
[d1a859c]608
[e6bfa70]609@item ENOENT
610The pathname argument is an empty string or the named node
611does not exist.
[d1a859c]612
[e6bfa70]613@item EINVAL
614Either both or neither of CFG_LOGICAL and CFG_PHYSICAL are
615specified by the options argument ???????????
[d1a859c]616
[e6bfa70]617@item ENOMEM
618Not enough memory is available to create the necessary structures.
[d1a859c]619
[e6bfa70]620@item ELOOP
[d5ef5bd1]621More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]622resolution of the pathnames argument.
[d1a859c]623
[e6bfa70]624@item ENAMETOOLONG
625As a result of encountering a symbolic link in resolution of the
[a99ea16]626pathname specified by the pathnames argument, the length of
[d5ef5bd1]627the substituted pathname string exceeded @code{PATH_MAX}.
[16bed8a]628
629@end table
630
[832e33c]631@subheading DESCRIPTION:
632
[d1a859c]633The @code{cfg_open} function shall open a configuration traversal stream
634rooted in the configuration nodes name by the @code{pathnames} argument.
635It shall store a pointer to a CFG object that represents that stream at
636the location identified the @code{cfgstream} pointer.  The @code{pathnames}
637argument is an array of character pointers to NULL-terminated strings.
638The last member of this array shall be a NULL pointer.
639
640The value of @code{options} is the bitwise inclusive OR of values from the
641following lists.  Applications shall supply exactly one of the first two
642values below in @code{options}.
643
644@table @b
645
646@item CFG_LOGICAL
647When symbolic links referencing existing nodes are
648encountered during the traversal, the @code{cfg_info}
649field of the returned CFGENT structure shall describe
650the target node pointed to by the link instead of the
651link itself, unless the target node does not exist.
652If the target node has children, the pre-order return,
[a99ea16]653followed by the return of structures referencing all of
[d1a859c]654its descendants, followed by a post-order return, shall
655be done.
[3f9da79]656                   
[d1a859c]657@item CFG_PHYSICAL
658When symbolic links are encountered during the traversal,
659the @code{cfg_info} field shall describe the symbolic
660link.
661
662@end table
[3f9da79]663                   
[df8d3601]664
[d1a859c]665Any combination of the remaining flags can be specified in the value of
666@code{options}
667
668@table @b
669
670@item CFG_COMFOLLOW
671When symbolic links referencing existing nodes are
672specified in the @code{pathnames} argument, the
673@code{cfg_info} field of the returned CFGENT structure
674shall describe the target node pointed to by the link
675instead of the link itself, unless the target node does
676not exist.  If the target node has children, the
677pre-order return, followed by the return of structures
678referencing all its descendants, followed by a post-order
679return, shall be done.
680
681@item CFG_XDEV
682The configuration space functions shall not return a
683CFGENT structure for any node in a different configuration
[a99ea16]684space than the configuration space of the nodes identified
[d1a859c]685by the CFGENT structures for the @code{pathnames} argument.
686
687@end table
688
689The @code{cfg_open} argument @code{compar} shall either be NULL or point
690to a function that shall be called with two pointers to pointers to CFGENT
691structures that shall return less than, equal to , or greater than zero if
692the node referenced by the first argument is considered to be respectively
693less than, equal to, or greater than the node referenced by the second.
694The CFGENT structure fields provided to the comparison routine shall be as
695described with the exception that the contents of the @code{cfg_path} and
696@code{cfg_pathlen} fields are unspecified.
697
698This comparison routine is used to determine the order in which nodes in
699directories encountered during the traversal are returned, and the order
700of traversal when more than one node is specified in the @code{pathnames}
701argument to @code{cfg_open}.  If a comparison routine is specified, the
702order of traversal shall be from the least to the greatest.  If the
703@code{compar} argument is NULL, the order of traversal shall be as listed
704in the @code{pathnames} argument.
[e6bfa70]705
[832e33c]706@subheading NOTES:
707
[d1a859c]708The @code{_POSIX_CFG} feature flag is defined to indicate
709this service is available.
710
[832e33c]711@page
[e6bfa70]712@subsection cfg_read - Read a Configuration Space
[832e33c]713
714@subheading CALLING SEQUENCE:
715
716@ifset is-C
717@example
[3e6eb1dd]718#include <cfg.h>
719
[e6bfa70]720int cfg_read( 
721  CFG           *cfgp,
722  CFGENT       **node
[832e33c]723);
724@end example
725@end ifset
726
727@ifset is-Ada
728@end ifset
729
730@subheading STATUS CODES:
731
[16bed8a]732@table @b
[e6bfa70]733@item EACCES
734Search permission is denied for any component of a pathname.
[d1a859c]735
[e6bfa70]736@item EBADF
737The cfgp argument does not refer to an open configuration
738space.
[d1a859c]739
[e6bfa70]740@item ELOOP
741A loop exists in symbolic links encountered during resolution
742of a pathname.
[d1a859c]743
[e6bfa70]744@item ENOENT
745A named node does not exist.
[d1a859c]746
[e6bfa70]747@item ENOMEM
748Not enough memory is available to create the necessary structures.
[d1a859c]749
[e6bfa70]750@item ELOOP
[d5ef5bd1]751More than @code{SYMLOOP_MAX} symbolic links were encountered during
[e6bfa70]752resolution of the cfgpath argument.
[d1a859c]753
[e6bfa70]754@item ENAMETOOLONG
[a99ea16]755As a result of encountering a symbolic link in resolution of the
[e6bfa70]756pathname specified by the pathnames argument, the length of the
[d5ef5bd1]757substituted pathname string exceeded @code{PATH_MATH}.
[16bed8a]758
759@end table
760
[832e33c]761@subheading DESCRIPTION:
762
[a99ea16]763The @code{cfg_read} function returns a pointer to a CFGENT structure
[d1a859c]764representing a node in the configuration space to which @code{cfgp}
765refers.  The returned pointer shall be stored at the location
766indicated by the @code{node} argument.
767
768The child nodes of each node in the configuration tree is returned
769by @code{cfg_read}.  If a comparison routine is specified to the
770@code{cfg_open} function, the order of return of the child nodes shall
771be as specified by the routine, from least to greatest.  Otherwise
772the order of return is unspecified.
773
774Structures referencing nodes with children shall be returned by the
775function @code{cfg_read} at least twice [unless the application
776specifies otherwise with @code{cfg_mark}]-once immediately before
777the structures representing their descendants, are returned
778(pre-order), and once immediately after structures representing all
779of their descendants, if any, are returned (post-order).  The
[a99ea16]780CFGENT structure returned in post-order (with the exception of the
[d1a859c]781@code{cfg_info} field) shall be identical to that returned in pre-order.
782Structures referencing nodes of other types shall be returned at least
783once.
784
785The fields of the CFGENT structure shall contain the following
[a99ea16]786information:
[df8d3601]787
[d1a859c]788@table @b
[9886290]789
[d1a859c]790@item cfg_parent
791A pointer to the structure returned by the
792@code{cfg_read} function for the node that contains
793the entry for the current node.  A @code{cfg_parent}
794structure shall be provided for the node(s) specified
795by the @code{pathnames} argument to the @code{cfg_open}
796function, but the contents of other than its
797@code{cfg_number}, @code{cfg_pointer}, @code{cfg_parent},
798and @code{cfg_parent}, and @code{cfg_level} fields are
799unspecified.  Its @code{cfg_link} field is unspecified.
800
801@item cfg_link
802Upon return from the @code{cfg_children} function, the
803@code{cfg_link} field points to the next CFGENT structure
804in a NULL-terminated linked list of CFGENT structures. 
805Otherwise, the content of the @code{cfg_link} field is
806unspecified.
807
808@item cfg_cycle
809If the structure being returned by @code{cfg_read}
810represents a node that appears in the @code{cfg_parent}
811linked list tree, the @code{cfg_cycle} field shall point
812to the structure representing that entry from the
813@code{cfg_parent} linked list.  Otherwise the content of
814the @code{cfg_cycle} field is unspecified.
815
816@item cfg_number
817The @code{cfg_number} field is provided for use by the
818application program.  It shall be initialized to zero for
819each new node returned by the @code{cfg_read} function,
820but shall not be further modified the configuration space
821routines.
822
823@item cfg_pointer
824The @code{cfg_pointer} field is provided for use by the
825application program.  It shall be initialized to NULL for
826each new node returned by the @code{cfg_read} function,
827but shall not be further modified by the configuration
828space routines.
829
830@item cfg_path
831A pathname for the node including and relative to the
832argument supplied to the @code{cfg_open} routine for this
[a99ea16]833configuration space.  This pathname may be longer than
834@code{PATH_MAX} bytes.  This pathname shall be NULL-terminated.
[d1a859c]835
836@item cfg_name
837The nodename of the node.
838
839@item cfg_pathlen
840The length of the string pointed at by the @code{cfg_path}
841field when returned by @code{cfg_read}.
842
843@item cfg_namelen
844The length of the string pointed at by the @code{cfg_name}
845field.
846
847@item cfg_level
848The depth of the current entry in the configuration space.
[a99ea16]849The @code{cfg_level} field of the @code{cfg_parent}
[d1a859c]850structure for each of the node(s) specified in the
851@code{pathnames} argument to the @code{cfg_open} function
852shall be set to 0, and this number shall be incremented for
853for each node level descendant.
854
855@item cfg_info
856This field shall contain one of the values listed below.  If
857an object can have more than one info value, the first
858appropriate value listed below shall be returned.
859
860@table @b
861
862@item CFG_D
863The structure represents a node with children in
864pre-order.
865
866@item CFG_DC
867The structure represents a node that is a parent
868of the node most recently returned by @code{cfg_read}.
869The @code{cfg_cycle} field shall reference the
870structure previously returned by @code{cfg_read} that
871is the same as the returned structure.
872
873@item CFG_DEFAULT
874The structure represents a node that is not
875represented by one of the other node types
876
877@item CFG_DNR
878The structure represents a node, not of type symlink,
879that is unreadable.  The variable @code{cfg_errno}
880shall be set to the appropriate value.
881
882@item CFG_DP
883The structure represents a node with children in
884post-order.  This value shall occur only if CFG_D
885has previously been returned for this entry.
886
887@item CFG_ERR
888The structure represents a node for which an error has
889occurred.  The variable @code{cfg_errno} shall be set
890to the appropriate value.
891
892@item CFG_F
893The structure represents a node without children.
894
895@item CFG_SL
896The structure represents a node of type symbolic link.
897
898@item CFG_SLNONET
899The structure represents a node of type symbolic link
900with a target node for which node characteristic
901information cannot be obtained.
902
903@end table
904
905@end table
906
907Structures returned by @code{cfg_read} with a @code{cfg_info} field equal
908to CFG_D shall be accessible until a subsequent call, on the same
909configuration traversal stream, to @code{cfg_close}, or to @code{cfg_read}
910after they have been returned by the @code{cfg_read} function in
[a99ea16]911post-order.  Structures returned by @code{cfg_read} with an
[d1a859c]912@code{cfg_info} field not equal to CFG_D shall be accessible until a
913subsequent call, on the same configuration traversal stream, to
914@code{cfg_close} or @code{cfg_read}.
915
916The content of the @code{cfg_path} field is specified only for the
917structure most recently returned by @code{cfg_read}.
918
919The specified fields in structures in the list representing nodes for
920which structures have previously been returned by @code{cfg_children},
921shall be identical to those returned by @code{cfg_children}, except that
922the contents of the @code{cfg_path} and @code{cfg_pathlen} fields are
923unspecified.
924         
925@subheading NOTES:
926
927The @code{_POSIX_CFG} feature flag is defined to indicate
928this service is available.
[832e33c]929
930@page
[e6bfa70]931@subsection cfg_children - Get Node Entries
[832e33c]932
933@subheading CALLING SEQUENCE:
934
935@ifset is-C
936@example
[3e6eb1dd]937#include <cfg.h>
938
[832e33c]939int cfg_children(
[e6bfa70]940  CFG           *cfgp,
941  int            options,
942  CFGENT       **children
[832e33c]943);
944@end example
945@end ifset
946
947@ifset is-Ada
948@end ifset
949
950@subheading STATUS CODES:
951
[16bed8a]952@table @b
[e6bfa70]953@item EACCES
954Search permission is denied for any component of a pathname
[d1a859c]955
[e6bfa70]956@item EBADF
957The cfgp argument does not refer to an open configuration space.
[d1a859c]958
[e6bfa70]959@item ELOOP
960A loop exists in symbolic links encountered during resolution of
961a pathname.
[d1a859c]962
[e6bfa70]963@item ENAMETOOLONG
[d5ef5bd1]964The length of a pathname exceeds @code{PATH_MAX}, or a pathname
965component is longer than @code{NAME_MAX} while @code{_POSIX_NO_TRUNC} is
[e6bfa70]966in effect.
[d1a859c]967
[e6bfa70]968@item EINVAL
[a99ea16]969The specified value of the options argument is invalid.
[d1a859c]970
[e6bfa70]971@item ENOENT
972The named node does not exist.
[d1a859c]973
[e6bfa70]974@item ENOMEM
975Not enough memory is available to create the necessary structures.
[16bed8a]976
977@end table
978
[832e33c]979@subheading DESCRIPTION:
980
[d1a859c]981The first @code{cfg_children} call after a @code{cfg_read} shall
982return information about the first node without children under the
983node returned by @code{cfg_read}.  Subsequent calls to
984@code{cfg_children} without the intervening @code{cfg_read} shall
985return information about the remaining nodes without children under
986that same node.
[df8d3601]987
[d1a859c]988If @code{cfg_read} has not yet been called for the configuration
989traversal stream represented by @code{cfgp}, @code{cfg_children}
990shall return a pointer to the first entry in a list of the nodes
991represented by the @code{pathnames} argument to @code{cfg_open}.
[df8d3601]992
[d1a859c]993In either case, the list shall be NULL-terminated, ordered by the
994user-specified comparison function, if any, and linked through the
995cfg_link field.
[df8d3601]996
[832e33c]997@subheading NOTES:
998
[d1a859c]999The @code{_POSIX_CFG} feature flag is defined to indicate
1000this service is available.
1001
[832e33c]1002@page
[e6bfa70]1003@subsection cfg_mark - Set Configuration Space Options
[832e33c]1004
1005@subheading CALLING SEQUENCE:
1006
1007@ifset is-C
1008@example
[3e6eb1dd]1009#include <cfg.h>
1010
[832e33c]1011int cfg_mark(
[e6bfa70]1012  CFG           *cfgp,
1013  CFGENT        *f,
1014  int            options
[832e33c]1015);
1016@end example
1017@end ifset
1018
1019@ifset is-Ada
1020@end ifset
1021
1022@subheading STATUS CODES:
1023
[16bed8a]1024@table @b
[e6bfa70]1025@item EINVAL
1026The specified combination of the cfgp and f arguments is not
1027supported by the implementation.
[d1a859c]1028
[e6bfa70]1029@item EINVAL
1030The specified value of the options argument is invalid.
[16bed8a]1031
1032@end table
1033
[832e33c]1034@subheading DESCRIPTION:
1035
[d1a859c]1036The @code{cfg_mark} function modifies the subsequent behavior of
1037the cfg functions with regard to the node referenced by the structure
1038pointed to by the argument @code{f} or the configuration space referenced
1039by the structure pointed to by the argument @code{cfgp}.
1040
1041Exactly one of the @code{f} argument and the @code{cfgp} argument shall
1042be NULL.
1043
1044The value of the @code{options} argument shall be exactly one of the
1045flags specified in the following list:
1046
1047@table @b
1048
1049@item CFG_AGAIN
1050If the @code{cfgp} argument is non-NULL, or the @code{f}
1051argument is NULL, or the structure referenced by @code{f}
1052is not the one most recently returned by @code{cfg_read},
[a99ea16]1053@code{cfg_mark} shall return an error.  Otherwise, the next
1054call to the @code{cfg_read} function shall return the
[d1a859c]1055structure referenced by @code{f} with the @code{cfg_info}
1056field reinitialized.  Subsequent behavior of the @code{cfg}
1057functions shall be based on the reinitialized value of
[a99ea16]1058@code{cfg_info}.
[d1a859c]1059
1060@item CFG_SKIP
1061If the @code{cfgp} argument is non-NULL, or the @code{f}
1062argument is NULL, or the structure referenced by @code{f}
1063is not one of those specified as accessible, or the structure
1064referenced by @code{f} is not for a node of type pre-order
1065node, @code{cfg_mark} shall return an error.  Otherwise, no
1066more structures for the node referenced by @code{f} or its
1067descendants shall be returned by the @code{cfg_read} function.
1068
1069@item CFG_FOLLOW
1070If the @code{cfgp} argument is non-NULL, or the @code{f}
1071argument is NULL, or the structure referenced by @code{f}
1072is not one of those specified as accessible, or the structure
1073referenced by @code{f} is not for a node of type symbolic link,
1074@code{cfg_mark} shall return an error.  Otherwise, the next
1075call to the @code{cfg_read} function shall return the structure
1076referenced by @code{f} with the @code{cfg_info} field reset
1077to reflect the target of the symbolic link instead of the
1078symbolic link itself.  If the target of the link is node with
1079children, the pre-order return, followed by the return of
1080structures referencing all of its descendants, followed by a
1081post-order return, shall be done.
1082
1083@end table
1084
1085If the target of the symbolic link does not exist, the fields
1086of the structure by @code{cfg_read} shall be unmodified, except
1087that the @code{cfg_info} field shall be reset to @code{CFG_SLNONE}.
[e6bfa70]1088
[832e33c]1089@subheading NOTES:
1090
[d1a859c]1091The @code{_POSIX_CFG} feature flag is defined to indicate
1092this service is available.
1093
[832e33c]1094@page
[e6bfa70]1095@subsection cfg_close - Close a Configuration Space
[832e33c]1096
1097@subheading CALLING SEQUENCE:
1098
1099@ifset is-C
1100@example
[3e6eb1dd]1101#include <cfg.h>
1102
[832e33c]1103int cfg_close(
[e6bfa70]1104  CFG           *cfgp
[832e33c]1105);
1106@end example
1107@end ifset
1108
1109@ifset is-Ada
1110@end ifset
1111
1112@subheading STATUS CODES:
1113
[16bed8a]1114@table @b
[e6bfa70]1115@item EBADF
1116The cfgp argument does not refer to an open configuration space
1117traversal stream.
[16bed8a]1118
1119@end table
1120
[832e33c]1121@subheading DESCRIPTION:
1122
[d1a859c]1123The @code{cfg_close} function closes a configuration space transversal
1124stream represented by the CFG structure pointed at by the @code{cfgp}
1125argument.  All system resources allocated for this configuration space
[a99ea16]1126traversal stream should be deallocated.  Upon return, the value of
[d1a859c]1127@code{cfgp} need not point to an accessible object of type CFG.
[e6bfa70]1128
[832e33c]1129@subheading NOTES:
1130
[d1a859c]1131The @code{_POSIX_CFG} feature flag is defined to indicate
1132this service is available.
[08142b48]1133
1134@page
1135@subsection readdir - Reads a directory
1136
1137@subheading CALLING SEQUENCE:
1138
1139@ifset is-C
1140@example
1141#include <sys/types.h>
1142#include <dirent.h>
1143
1144struct dirent *readdir(
1145  DIR   *dirp
1146);
1147@end example
1148@end ifset
1149
1150@ifset is-Ada
1151@end ifset
1152
1153@subheading STATUS CODES:
1154
1155@table @b
1156@item EBADF
1157Invalid file descriptor
1158
1159@end table
1160
1161@subheading DESCRIPTION:
1162
1163The @code{readdir} function returns a pointer to a structure @code{dirent}
1164representing the next directory entry from the directory stream pointed to
1165by @code{dirp}.  On end-of-file, NULL is returned.
1166
1167The @code{readdir} function may (or may not) return entries for . or .. Your
1168program should tolerate reading dot and dot-dot but not require them.
1169
1170The data pointed to be @code{readdir} may be overwritten by another call to
1171@code{readdir} for the same directory stream.  It will not be overwritten by
1172a call for another directory.
1173
1174@subheading NOTES:
1175
1176If ptr is not a pointer returned by @code{malloc}, @code{calloc}, or
1177@code{realloc} or has been deallocated with @code{free} or @code{realloc},
1178the results are not portable and are probably disastrous.
1179
1180@page
1181@subsection open - Opens a file
1182
1183@subheading CALLING SEQUENCE:
1184
1185@ifset is-C
1186@example
1187#include <sys/types.h>
1188#include <sys/stat.h>
1189#include <fcntl.h>
1190
1191int open(
1192   const char *path,
1193   int         oflag,
1194   mode_t      mode
1195);
1196@end example
1197@end ifset
1198
1199@ifset is-Ada
1200@end ifset
1201
1202@subheading STATUS CODES:
1203
1204@table @b
1205@item EACCES
1206Search permission is denied for a directory in a file's path prefix
1207@item EEXIST
1208The named file already exists.
1209@item EINTR
1210Function was interrupted by a signal.
1211@item EISDIR
1212Attempt to open a directory for writing or to rename a file to be a
1213directory.
1214@item EMFILE
1215Too many file descriptors are in use by this process.
1216@item ENAMETOOLONG
1217Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in
1218effect.
1219@item ENFILE
1220Too many files are currently open in the system.
1221@item ENOENT
1222A file or directory does not exist.
1223@item ENOSPC
1224No space left on disk.
1225@item ENOTDIR
1226A component of the specified pathname was not a directory when a directory
1227was expected.
1228@item ENXIO
1229No such device.  This error may also occur when a device is not ready, for
1230example, a tape drive is off-line.
1231@item EROFS
1232Read-only file system.
1233@end table
1234
1235@subheading DESCRIPTION:
1236
1237The @code{open} function establishes a connection between a file and a file
1238descriptor.  The file descriptor is a small integer that is used by I/O
1239functions to reference the file.  The @code{path} argument points to the
1240pathname for the file.
1241
1242The @code{oflag} argument is the bitwise inclusive OR of the values of
1243symbolic constants.  The programmer must specify exactly one of the following
1244three symbols:
1245
1246@table @b
1247@item O_RDONLY
1248Open for reading only.
1249
1250@item O_WRONLY
1251Open for writing only.
1252
1253@item O_RDWR
1254Open for reading and writing.
1255
1256@end table
1257
1258Any combination of the following symbols may also be used.
1259
1260@table @b
1261@item O_APPEND
1262Set the file offset to the end-of-file prior to each write.
1263
1264@item O_CREAT
1265If the file does not exist, allow it to be created.  This flag indicates
1266that the @code{mode} argument is present in the call to @code{open}.
1267
1268@item O_EXCL
1269This flag may be used only if O_CREAT is also set.  It causes the call
1270to @code{open} to fail if the file already exists.
1271
1272@item O_NOCTTY
1273If @code{path} identifies a terminal, this flag prevents that teminal from
1274becoming the controlling terminal for thi9s process.  See Chapter 8 for a
1275description of terminal I/O.
1276
1277@item O_NONBLOCK
1278Do no wait for the device or file to be ready or available.  After the file
1279is open, the @code{read} and @code{write} calls return immediately.  If the
1280process would be delayed in the read or write opermation, -1 is returned and
1281@code{errno} is set to @code{EAGAIN} instead of blocking the caller.
1282
1283@item O_TRUNC
1284This flag should be used only on ordinary files opened for writing.  It
1285causes the file to be tuncated to zero length..
1286
1287@end table
1288
1289Upon successful completion, @code{open} returns a non-negative file
1290descriptor.
1291
1292@subheading NOTES:
1293
1294@page
1295@subsection umask - Sets a file creation mask.
1296
1297@subheading CALLING SEQUENCE:
1298
1299@ifset is-C
1300@example
1301#include <sys/types.h>
1302#include <sys/stat.h>
1303
1304mode_t umask(
1305  mode_t cmask
1306);
1307@end example
1308@end ifset
1309
1310@ifset is-Ada
1311@end ifset
1312
1313@subheading STATUS CODES:
1314
1315@subheading DESCRIPTION:
1316
1317The @code{umask} function sets the process file creation mask to @code{cmask}.
1318The file creation mask is used during @code{open}, @code{creat}, @code{mkdir},
1319@code{mkfifo} calls to turn off permission bits in the @code{mode} argument.
1320Bit positions that are set in @code{cmask} are cleared in the mode of the
1321created file.
1322
1323The file creation mask is inherited across @code{fork} and @code{exec} calls.
1324This makes it possible to alter the default permission bits of created files.
1325
1326@subheading NOTES:
1327
1328The @code{cmask} argument should have only permission bits set.  All other
1329bits should be zero.
1330
1331@page
1332@subsection link - Creates a link to a file
1333
1334@subheading CALLING SEQUENCE:
1335
1336@ifset is-C
1337@example
1338#include <unistd.h>
1339
1340int link(
1341  const char *existing,
1342  const char *new
1343);
1344@end example
1345@end ifset
1346
1347@ifset is-Ada
1348@end ifset
1349
1350@subheading STATUS CODES:
1351
1352@table @b
1353@item EACCES
1354Search permission is denied for a directory in a file's path prefix
1355@item EEXIST
1356The named file already exists.
1357@item EMLINK
1358The number of links would exceed @code{LINK_MAX}.
1359@item ENAMETOOLONG
1360Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in
1361effect.
1362@item ENOENT
1363A file or directory does not exist.
1364@item ENOSPC
1365No space left on disk.
1366@item ENOTDIR
1367A component of the specified pathname was not a directory when a directory
1368was expected.
1369@item EPERM
1370Operation is not permitted.  Process does not have the appropriate priviledges
1371or permissions to perform the requested operations.
1372@item EROFS
1373Read-only file system.
1374@item EXDEV
1375Attempt to link a file to another file system.
1376
1377@end table
1378
1379@subheading DESCRIPTION:
1380
1381The @code{link} function atomically creates a new link for an existing file
1382and increments the link count for the file.
1383
1384If the @code{link} function fails, no directories are modified.
1385
1386The @code{existing} argument should not be a directory.
1387
1388The callder may (or may not) need permission to access the existing file.
1389
1390@subheading NOTES:
1391
1392@page
1393@subsection unlink - Removes a directory entry
1394
1395@subheading CALLING SEQUENCE:
1396
1397@ifset is-C
1398@example
1399#include <unistd.h>
1400
1401int unlink(
1402  const char path
1403);
1404@end example
1405@end ifset
1406
1407@ifset is-Ada
1408@end ifset
1409
1410@subheading STATUS CODES:
1411
1412@table @b
1413@item EACCES
1414Search permission is denied for a directory in a file's path prefix
1415@item EBUSY
1416The directory is in use.
1417@item ENAMETOOLONG
1418Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in
1419effect.
1420@item ENOENT
1421A file or directory does not exist.
1422@item ENOTDIR
1423A component of the specified pathname was not a directory when a directory
1424was expected.
1425@item EPERM
1426Operation is not permitted.  Process does not have the appropriate priviledges
1427or permissions to perform the requested operations.
1428@item EROFS
1429Read-only file system.
1430
1431@end table
1432
1433@subheading DESCRIPTION:
1434
1435The @code{unlink} function removes the link named by @{code} and decrements the
1436link count of the file referenced by the link.  When the link count goes to zero
1437and no process has the file open, the space occupied by the file is freed and the
1438file is no longer accessible.
1439
1440@subheading NOTES:
1441
1442@page
1443@subsection mkdir - Makes a directory
1444
1445@subheading CALLING SEQUENCE:
1446
1447@ifset is-C
1448@example
1449#include <sys/types.h>
1450#include <sys/stat.h>
1451
1452int mkdir(
1453  const char *path,
1454  mode_t      mode
1455);
1456@end example
1457@end ifset
1458
1459@ifset is-Ada
1460@end ifset
1461
1462@subheading STATUS CODES:
1463
1464@table @b
1465@item EACCES
1466Search permission is denied for a directory in a file's path prefix
1467@item EEXIST
1468The name file already exist. 
1469@item EMLINK
1470The number of links would exceed LINK_MAX
1471@item ENAMETOOLONG
1472Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in
1473effect.
1474@item ENOENT
1475A file or directory does not exist.
1476@item ENOSPC
1477No space left on disk.
1478@item ENOTDIR
1479A component of the specified pathname was not a directory when a directory
1480was expected.
1481@item EROFS
1482Read-only file system.
1483
1484@end table
1485
1486@subheading DESCRIPTION:
1487
1488The @code{mkdir} function creates a new diectory named @code{path}.  The
1489permission bits (modified by the file creation mask) are set from @code{mode}.
1490The owner and group IDs for the directory are set from the effective user ID
1491and group ID.
1492
1493The new directory may (or may not) contain entries for. and .. but is otherwise
1494empty.
1495
1496@subheading NOTES:
1497
1498@page
1499@subsection chmod - Changes file mode.
1500
1501@subheading CALLING SEQUENCE:
1502
1503@ifset is-C
1504@example
1505#include <sys/types.h>
1506#include <sys/stat.h>
1507
1508int chmod(
1509  const char *path,
1510  mode_t      mode
1511);
1512@end example
1513@end ifset
1514
1515@ifset is-Ada
1516@end ifset
1517
1518@subheading STATUS CODES:
1519
1520@table @b
1521@item EACCES
1522Search permission is denied for a directory in a file's path prefix
1523@item ENAMETOOLONG
1524Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in
1525effect.
1526@item ENOENT
1527A file or directory does not exist.
1528@item ENOTDIR
1529A component of the specified pathname was not a directory when a directory
1530was expected.
1531@item EPERM
1532Operation is not permitted.  Process does not have the appropriate priviledges
1533or permissions to perform the requested operations.
1534@item EROFS
1535Read-only file system.
1536
1537@end table
1538
1539@subheading DESCRIPTION:
1540
1541Set the file permission bits, the set user ID bit, and the set group ID bit
1542for the file named by @code{path} to @code{mode}.  If the effective user ID
1543does not match the owner of the file and the calling process does not have
1544the appropriate privileges, @code{chmod} returns -1 and sets @code{errno} to
1545@code{EPERM}.
1546
1547@subheading NOTES:
1548
1549@page
1550@subsection chown - Changes the owner and/or group of a file.
1551
1552@subheading CALLING SEQUENCE:
1553
1554@ifset is-C
1555@example
1556#include <sys/types.h>
1557#include <unistd.h>
1558
1559int chown(
1560  const char *path,
1561  uid_t       owner,
1562  gid_t       group
1563);
1564@end example
1565@end ifset
1566
1567@ifset is-Ada
1568@end ifset
1569
1570@subheading STATUS CODES:
1571
1572@table @b
1573@item EACCES
1574Search permission is denied for a directory in a file's path prefix
1575@item EINVAL
1576Invalid argument
1577@item ENAMETOOLONG
1578Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in
1579effect.
1580@item ENOENT
1581A file or directory does not exist.
1582@item ENOTDIR
1583A component of the specified pathname was not a directory when a directory
1584was expected.
1585@item EPERM
1586Operation is not permitted.  Process does not have the appropriate priviledges
1587or permissions to perform the requested operations.
1588@item EROFS
1589Read-only file system.
1590
1591@end table
1592
1593@subheading DESCRIPTION:
1594
1595The user ID and group ID of the file named by @code{path} are set to
1596@cdoe{owner} and @code{path}, respectively.
1597
1598For regular files, the set group ID (S_ISGID) and set user ID (S_ISUID)
1599bits are cleared.
1600
1601Some systems consider it a security violation to allow the owner of a file to
1602be changed,  If users are billed for disk space usage, loaning a file to
1603another user could result in incorrect billing.  The @code{chown} function
1604may be restricted to privileged users for some or all files.  The group ID can
1605still be changed to one of the supplementary group IDs.
1606
1607@subheading NOTES:
1608
1609This function may be restricted for some file.  The @code{pathconf} function
1610can be used to test the _PC_CHOWN_RESTRICTED flag.
1611
1612
Note: See TracBrowser for help on using the repository browser.