blob: 972e1065beec44850f2ec5b1cddbce3e45a83413 [file] [log] [blame]
xf.libdd93d52023-05-12 07:10:14 -07001@node File System Interface, Pipes and FIFOs, Low-Level I/O, Top
2@c %MENU% Functions for manipulating files
3@chapter File System Interface
4
5This chapter describes @theglibc{}'s functions for manipulating
6files. Unlike the input and output functions (@pxref{I/O on Streams};
7@pxref{Low-Level I/O}), these functions are concerned with operating
8on the files themselves rather than on their contents.
9
10Among the facilities described in this chapter are functions for
11examining or modifying directories, functions for renaming and deleting
12files, and functions for examining and setting file attributes such as
13access permissions and modification times.
14
15@menu
16* Working Directory:: This is used to resolve relative
17 file names.
18* Accessing Directories:: Finding out what files a directory
19 contains.
20* Working with Directory Trees:: Apply actions to all files or a selectable
21 subset of a directory hierarchy.
22* Hard Links:: Adding alternate names to a file.
23* Symbolic Links:: A file that ``points to'' a file name.
24* Deleting Files:: How to delete a file, and what that means.
25* Renaming Files:: Changing a file's name.
26* Creating Directories:: A system call just for creating a directory.
27* File Attributes:: Attributes of individual files.
28* Making Special Files:: How to create special files.
29* Temporary Files:: Naming and creating temporary files.
30@end menu
31
32@node Working Directory
33@section Working Directory
34
35@cindex current working directory
36@cindex working directory
37@cindex change working directory
38Each process has associated with it a directory, called its @dfn{current
39working directory} or simply @dfn{working directory}, that is used in
40the resolution of relative file names (@pxref{File Name Resolution}).
41
42When you log in and begin a new session, your working directory is
43initially set to the home directory associated with your login account
44in the system user database. You can find any user's home directory
45using the @code{getpwuid} or @code{getpwnam} functions; see @ref{User
46Database}.
47
48Users can change the working directory using shell commands like
49@code{cd}. The functions described in this section are the primitives
50used by those commands and by other programs for examining and changing
51the working directory.
52@pindex cd
53
54Prototypes for these functions are declared in the header file
55@file{unistd.h}.
56@pindex unistd.h
57
58@comment unistd.h
59@comment POSIX.1
60@deftypefun {char *} getcwd (char *@var{buffer}, size_t @var{size})
61@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
62@c If buffer is NULL, this function calls malloc and realloc, and, in
63@c case of error, free. Linux offers a getcwd syscall that we use on
64@c GNU/Linux systems, but it may fail if the pathname is too long. As a
65@c fallback, and on other systems, the generic implementation opens each
66@c parent directory with opendir, which allocates memory for the
67@c directory stream with malloc. If a fstatat64 syscall is not
68@c available, very deep directory trees may also have to malloc to build
69@c longer sequences of ../../../... than those supported by a global
70@c const read-only string.
71
72@c linux/__getcwd
73@c posix/__getcwd
74@c malloc/realloc/free if buffer is NULL, or if dir is too deep
75@c lstat64 -> see its own entry
76@c fstatat64
77@c direct syscall if possible, alloca+snprintf+*stat64 otherwise
78@c openat64_not_cancel_3, close_not_cancel_no_status
79@c __fdopendir, __opendir, __readdir, rewinddir
80The @code{getcwd} function returns an absolute file name representing
81the current working directory, storing it in the character array
82@var{buffer} that you provide. The @var{size} argument is how you tell
83the system the allocation size of @var{buffer}.
84
85The @glibcadj{} version of this function also permits you to specify a
86null pointer for the @var{buffer} argument. Then @code{getcwd}
87allocates a buffer automatically, as with @code{malloc}
88(@pxref{Unconstrained Allocation}). If the @var{size} is greater than
89zero, then the buffer is that large; otherwise, the buffer is as large
90as necessary to hold the result.
91
92The return value is @var{buffer} on success and a null pointer on failure.
93The following @code{errno} error conditions are defined for this function:
94
95@table @code
96@item EINVAL
97The @var{size} argument is zero and @var{buffer} is not a null pointer.
98
99@item ERANGE
100The @var{size} argument is less than the length of the working directory
101name. You need to allocate a bigger array and try again.
102
103@item EACCES
104Permission to read or search a component of the file name was denied.
105@end table
106@end deftypefun
107
108You could implement the behavior of GNU's @w{@code{getcwd (NULL, 0)}}
109using only the standard behavior of @code{getcwd}:
110
111@smallexample
112char *
113gnu_getcwd ()
114@{
115 size_t size = 100;
116
117 while (1)
118 @{
119 char *buffer = (char *) xmalloc (size);
120 if (getcwd (buffer, size) == buffer)
121 return buffer;
122 free (buffer);
123 if (errno != ERANGE)
124 return 0;
125 size *= 2;
126 @}
127@}
128@end smallexample
129
130@noindent
131@xref{Malloc Examples}, for information about @code{xmalloc}, which is
132not a library function but is a customary name used in most GNU
133software.
134
135@comment unistd.h
136@comment BSD
137@deftypefn {Deprecated Function} {char *} getwd (char *@var{buffer})
138@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{} @acsfd{}}}
139@c Besides the getcwd safety issues, it calls strerror_r on error, which
140@c brings in all of the i18n issues.
141This is similar to @code{getcwd}, but has no way to specify the size of
142the buffer. @Theglibc{} provides @code{getwd} only
143for backwards compatibility with BSD.
144
145The @var{buffer} argument should be a pointer to an array at least
146@code{PATH_MAX} bytes long (@pxref{Limits for Files}). On @gnuhurdsystems{}
147there is no limit to the size of a file name, so this is not
148necessarily enough space to contain the directory name. That is why
149this function is deprecated.
150@end deftypefn
151
152@comment unistd.h
153@comment GNU
154@deftypefun {char *} get_current_dir_name (void)
155@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
156@c Besides getcwd, which this function calls as a fallback, it calls
157@c getenv, with the potential thread-safety issues that brings about.
158@vindex PWD
159This @code{get_current_dir_name} function is basically equivalent to
160@w{@code{getcwd (NULL, 0)}}. The only difference is that the value of
161the @code{PWD} variable is returned if this value is correct. This is a
162subtle difference which is visible if the path described by the
163@code{PWD} value is using one or more symbol links in which case the
164value returned by @code{getcwd} can resolve the symbol links and
165therefore yield a different result.
166
167This function is a GNU extension.
168@end deftypefun
169
170@comment unistd.h
171@comment POSIX.1
172@deftypefun int chdir (const char *@var{filename})
173@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
174This function is used to set the process's working directory to
175@var{filename}.
176
177The normal, successful return value from @code{chdir} is @code{0}. A
178value of @code{-1} is returned to indicate an error. The @code{errno}
179error conditions defined for this function are the usual file name
180syntax errors (@pxref{File Name Errors}), plus @code{ENOTDIR} if the
181file @var{filename} is not a directory.
182@end deftypefun
183
184@comment unistd.h
185@comment XPG
186@deftypefun int fchdir (int @var{filedes})
187@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
188This function is used to set the process's working directory to
189directory associated with the file descriptor @var{filedes}.
190
191The normal, successful return value from @code{fchdir} is @code{0}. A
192value of @code{-1} is returned to indicate an error. The following
193@code{errno} error conditions are defined for this function:
194
195@table @code
196@item EACCES
197Read permission is denied for the directory named by @code{dirname}.
198
199@item EBADF
200The @var{filedes} argument is not a valid file descriptor.
201
202@item ENOTDIR
203The file descriptor @var{filedes} is not associated with a directory.
204
205@item EINTR
206The function call was interrupt by a signal.
207
208@item EIO
209An I/O error occurred.
210@end table
211@end deftypefun
212
213
214@node Accessing Directories
215@section Accessing Directories
216@cindex accessing directories
217@cindex reading from a directory
218@cindex directories, accessing
219
220The facilities described in this section let you read the contents of a
221directory file. This is useful if you want your program to list all the
222files in a directory, perhaps as part of a menu.
223
224@cindex directory stream
225The @code{opendir} function opens a @dfn{directory stream} whose
226elements are directory entries. Alternatively @code{fdopendir} can be
227used which can have advantages if the program needs to have more
228control over the way the directory is opened for reading. This
229allows, for instance, to pass the @code{O_NOATIME} flag to
230@code{open}.
231
232You use the @code{readdir} function on the directory stream to
233retrieve these entries, represented as @w{@code{struct dirent}}
234objects. The name of the file for each entry is stored in the
235@code{d_name} member of this structure. There are obvious parallels
236here to the stream facilities for ordinary files, described in
237@ref{I/O on Streams}.
238
239@menu
240* Directory Entries:: Format of one directory entry.
241* Opening a Directory:: How to open a directory stream.
242* Reading/Closing Directory:: How to read directory entries from the stream.
243* Simple Directory Lister:: A very simple directory listing program.
244* Random Access Directory:: Rereading part of the directory
245 already read with the same stream.
246* Scanning Directory Content:: Get entries for user selected subset of
247 contents in given directory.
248* Simple Directory Lister Mark II:: Revised version of the program.
249@end menu
250
251@node Directory Entries
252@subsection Format of a Directory Entry
253
254@pindex dirent.h
255This section describes what you find in a single directory entry, as you
256might obtain it from a directory stream. All the symbols are declared
257in the header file @file{dirent.h}.
258
259@comment dirent.h
260@comment POSIX.1
261@deftp {Data Type} {struct dirent}
262This is a structure type used to return information about directory
263entries. It contains the following fields:
264
265@table @code
266@item char d_name[]
267This is the null-terminated file name component. This is the only
268field you can count on in all POSIX systems.
269
270@item ino_t d_fileno
271This is the file serial number. For BSD compatibility, you can also
272refer to this member as @code{d_ino}. On @gnulinuxhurdsystems{} and most POSIX
273systems, for most files this the same as the @code{st_ino} member that
274@code{stat} will return for the file. @xref{File Attributes}.
275
276@item unsigned char d_namlen
277This is the length of the file name, not including the terminating
278null character. Its type is @code{unsigned char} because that is the
279integer type of the appropriate size. This member is a BSD extension.
280The symbol @code{_DIRENT_HAVE_D_NAMLEN} is defined if this member is
281available.
282
283@item unsigned char d_type
284This is the type of the file, possibly unknown. The following constants
285are defined for its value:
286
287@vtable @code
288@item DT_UNKNOWN
289The type is unknown. Only some filesystems have full support to
290return the type of the file, others might always return this value.
291
292@item DT_REG
293A regular file.
294
295@item DT_DIR
296A directory.
297
298@item DT_FIFO
299A named pipe, or FIFO. @xref{FIFO Special Files}.
300
301@item DT_SOCK
302A local-domain socket. @c !!! @xref{Local Domain}.
303
304@item DT_CHR
305A character device.
306
307@item DT_BLK
308A block device.
309
310@item DT_LNK
311A symbolic link.
312@end vtable
313
314This member is a BSD extension. The symbol @code{_DIRENT_HAVE_D_TYPE}
315is defined if this member is available. On systems where it is used, it
316corresponds to the file type bits in the @code{st_mode} member of
317@code{struct stat}. If the value cannot be determine the member
318value is DT_UNKNOWN. These two macros convert between @code{d_type}
319values and @code{st_mode} values:
320
321@comment dirent.h
322@comment BSD
323@deftypefun int IFTODT (mode_t @var{mode})
324@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
325This returns the @code{d_type} value corresponding to @var{mode}.
326@end deftypefun
327
328@comment dirent.h
329@comment BSD
330@deftypefun mode_t DTTOIF (int @var{dtype})
331@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
332This returns the @code{st_mode} value corresponding to @var{dtype}.
333@end deftypefun
334@end table
335
336This structure may contain additional members in the future. Their
337availability is always announced in the compilation environment by a
338macro names @code{_DIRENT_HAVE_D_@var{xxx}} where @var{xxx} is replaced
339by the name of the new member. For instance, the member @code{d_reclen}
340available on some systems is announced through the macro
341@code{_DIRENT_HAVE_D_RECLEN}.
342
343When a file has multiple names, each name has its own directory entry.
344The only way you can tell that the directory entries belong to a
345single file is that they have the same value for the @code{d_fileno}
346field.
347
348File attributes such as size, modification times etc., are part of the
349file itself, not of any particular directory entry. @xref{File
350Attributes}.
351@end deftp
352
353@node Opening a Directory
354@subsection Opening a Directory Stream
355
356@pindex dirent.h
357This section describes how to open a directory stream. All the symbols
358are declared in the header file @file{dirent.h}.
359
360@comment dirent.h
361@comment POSIX.1
362@deftp {Data Type} DIR
363The @code{DIR} data type represents a directory stream.
364@end deftp
365
366You shouldn't ever allocate objects of the @code{struct dirent} or
367@code{DIR} data types, since the directory access functions do that for
368you. Instead, you refer to these objects using the pointers returned by
369the following functions.
370
371@comment dirent.h
372@comment POSIX.1
373@deftypefun {DIR *} opendir (const char *@var{dirname})
374@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
375@c Besides the safe syscall, we have to allocate the DIR object with
376@c __alloc_dir, that calls malloc.
377The @code{opendir} function opens and returns a directory stream for
378reading the directory whose file name is @var{dirname}. The stream has
379type @code{DIR *}.
380
381If unsuccessful, @code{opendir} returns a null pointer. In addition to
382the usual file name errors (@pxref{File Name Errors}), the
383following @code{errno} error conditions are defined for this function:
384
385@table @code
386@item EACCES
387Read permission is denied for the directory named by @code{dirname}.
388
389@item EMFILE
390The process has too many files open.
391
392@item ENFILE
393The entire system, or perhaps the file system which contains the
394directory, cannot support any additional open files at the moment.
395(This problem cannot happen on @gnuhurdsystems{}.)
396
397@item ENOMEM
398Not enough memory available.
399@end table
400
401The @code{DIR} type is typically implemented using a file descriptor,
402and the @code{opendir} function in terms of the @code{open} function.
403@xref{Low-Level I/O}. Directory streams and the underlying
404file descriptors are closed on @code{exec} (@pxref{Executing a File}).
405@end deftypefun
406
407The directory which is opened for reading by @code{opendir} is
408identified by the name. In some situations this is not sufficient.
409Or the way @code{opendir} implicitly creates a file descriptor for the
410directory is not the way a program might want it. In these cases an
411alternative interface can be used.
412
413@comment dirent.h
414@comment GNU
415@deftypefun {DIR *} fdopendir (int @var{fd})
416@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
417@c The DIR object is allocated with __alloc_dir, that calls malloc.
418The @code{fdopendir} function works just like @code{opendir} but
419instead of taking a file name and opening a file descriptor for the
420directory the caller is required to provide a file descriptor. This
421file descriptor is then used in subsequent uses of the returned
422directory stream object.
423
424The caller must make sure the file descriptor is associated with a
425directory and it allows reading.
426
427If the @code{fdopendir} call returns successfully the file descriptor
428is now under the control of the system. It can be used in the same
429way the descriptor implicitly created by @code{opendir} can be used
430but the program must not close the descriptor.
431
432In case the function is unsuccessful it returns a null pointer and the
433file descriptor remains to be usable by the program. The following
434@code{errno} error conditions are defined for this function:
435
436@table @code
437@item EBADF
438The file descriptor is not valid.
439
440@item ENOTDIR
441The file descriptor is not associated with a directory.
442
443@item EINVAL
444The descriptor does not allow reading the directory content.
445
446@item ENOMEM
447Not enough memory available.
448@end table
449@end deftypefun
450
451In some situations it can be desirable to get hold of the file
452descriptor which is created by the @code{opendir} call. For instance,
453to switch the current working directory to the directory just read the
454@code{fchdir} function could be used. Historically the @code{DIR} type
455was exposed and programs could access the fields. This does not happen
456in @theglibc{}. Instead a separate function is provided to allow
457access.
458
459@comment dirent.h
460@comment GNU
461@deftypefun int dirfd (DIR *@var{dirstream})
462@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
463The function @code{dirfd} returns the file descriptor associated with
464the directory stream @var{dirstream}. This descriptor can be used until
465the directory is closed with @code{closedir}. If the directory stream
466implementation is not using file descriptors the return value is
467@code{-1}.
468@end deftypefun
469
470@node Reading/Closing Directory
471@subsection Reading and Closing a Directory Stream
472
473@pindex dirent.h
474This section describes how to read directory entries from a directory
475stream, and how to close the stream when you are done with it. All the
476symbols are declared in the header file @file{dirent.h}.
477
478@comment dirent.h
479@comment POSIX.1
480@deftypefun {struct dirent *} readdir (DIR *@var{dirstream})
481@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
482@c This function holds dirstream's non-recursive lock, which brings
483@c about the usual issues with locks and async signals and cancellation,
484@c but the lock taking is not enough to make the returned value safe to
485@c use, since it points to a stream's internal buffer that can be
486@c overwritten by subsequent calls or even released by closedir.
487This function reads the next entry from the directory. It normally
488returns a pointer to a structure containing information about the
489file. This structure is associated with the @var{dirstream} handle
490and can be rewritten by a subsequent call.
491
492@strong{Portability Note:} On some systems @code{readdir} may not
493return entries for @file{.} and @file{..}, even though these are always
494valid file names in any directory. @xref{File Name Resolution}.
495
496If there are no more entries in the directory or an error is detected,
497@code{readdir} returns a null pointer. The following @code{errno} error
498conditions are defined for this function:
499
500@table @code
501@item EBADF
502The @var{dirstream} argument is not valid.
503@end table
504
505To distinguish between an end-of-directory condition or an error, you
506must set @code{errno} to zero before calling @code{readdir}. To avoid
507entering an infinite loop, you should stop reading from the directory
508after the first error.
509
510In POSIX.1-2008, @code{readdir} is not thread-safe. In @theglibc{}
511implementation, it is safe to call @code{readdir} concurrently on
512different @var{dirstream}s, but multiple threads accessing the same
513@var{dirstream} result in undefined behavior. @code{readdir_r} is a
514fully thread-safe alternative, but suffers from poor portability (see
515below). It is recommended that you use @code{readdir}, with external
516locking if multiple threads access the same @var{dirstream}.
517@end deftypefun
518
519@comment dirent.h
520@comment GNU
521@deftypefun int readdir_r (DIR *@var{dirstream}, struct dirent *@var{entry}, struct dirent **@var{result})
522@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
523This function is a version of @code{readdir} which performs internal
524locking. Like @code{readdir} it returns the next entry from the
525directory. To prevent conflicts between simultaneously running
526threads the result is stored inside the @var{entry} object.
527
528@strong{Portability Note:} It is recommended to use @code{readdir}
529instead of @code{readdir_r} for the following reasons:
530
531@itemize @bullet
532@item
533On systems which do not define @code{NAME_MAX}, it may not be possible
534to use @code{readdir_r} safely because the caller does not specify the
535length of the buffer for the directory entry.
536
537@item
538On some systems, @code{readdir_r} cannot read directory entries with
539very long names. If such a name is encountered, @theglibc{}
540implementation of @code{readdir_r} returns with an error code of
541@code{ENAMETOOLONG} after the final directory entry has been read. On
542other systems, @code{readdir_r} may return successfully, but the
543@code{d_name} member may not be NUL-terminated or may be truncated.
544
545@item
546POSIX-1.2008 does not guarantee that @code{readdir} is thread-safe,
547even when access to the same @var{dirstream} is serialized. But in
548current implementations (including @theglibc{}), it is safe to call
549@code{readdir} concurrently on different @var{dirstream}s, so there is
550no need to use @code{readdir_r} in most multi-threaded programs. In
551the rare case that multiple threads need to read from the same
552@var{dirstream}, it is still better to use @code{readdir} and external
553synchronization.
554
555@item
556It is expected that future versions of POSIX will obsolete
557@code{readdir_r} and mandate the level of thread safety for
558@code{readdir} which is provided by @theglibc{} and other
559implementations today.
560@end itemize
561
562Normally @code{readdir_r} returns zero and sets @code{*@var{result}}
563to @var{entry}. If there are no more entries in the directory or an
564error is detected, @code{readdir_r} sets @code{*@var{result}} to a
565null pointer and returns a nonzero error code, also stored in
566@code{errno}, as described for @code{readdir}.
567
568It is also important to look at the definition of the @code{struct
569dirent} type. Simply passing a pointer to an object of this type for
570the second parameter of @code{readdir_r} might not be enough. Some
571systems don't define the @code{d_name} element sufficiently long. In
572this case the user has to provide additional space. There must be room
573for at least @code{NAME_MAX + 1} characters in the @code{d_name} array.
574Code to call @code{readdir_r} could look like this:
575
576@smallexample
577 union
578 @{
579 struct dirent d;
580 char b[offsetof (struct dirent, d_name) + NAME_MAX + 1];
581 @} u;
582
583 if (readdir_r (dir, &u.d, &res) == 0)
584 @dots{}
585@end smallexample
586@end deftypefun
587
588To support large filesystems on 32-bit machines there are LFS variants
589of the last two functions.
590
591@comment dirent.h
592@comment LFS
593@deftypefun {struct dirent64 *} readdir64 (DIR *@var{dirstream})
594@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
595The @code{readdir64} function is just like the @code{readdir} function
596except that it returns a pointer to a record of type @code{struct
597dirent64}. Some of the members of this data type (notably @code{d_ino})
598might have a different size to allow large filesystems.
599
600In all other aspects this function is equivalent to @code{readdir}.
601@end deftypefun
602
603@comment dirent.h
604@comment LFS
605@deftypefun int readdir64_r (DIR *@var{dirstream}, struct dirent64 *@var{entry}, struct dirent64 **@var{result})
606@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
607The @code{readdir64_r} function is equivalent to the @code{readdir_r}
608function except that it takes parameters of base type @code{struct
609dirent64} instead of @code{struct dirent} in the second and third
610position. The same precautions mentioned in the documentation of
611@code{readdir_r} also apply here.
612@end deftypefun
613
614@comment dirent.h
615@comment POSIX.1
616@deftypefun int closedir (DIR *@var{dirstream})
617@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@acsmem{} @acsfd{} @aculock{/hurd}}}
618@c No synchronization in the posix implementation, only in the hurd
619@c one. This is regarded as safe because it is undefined behavior if
620@c other threads could still be using the dir stream while it's closed.
621This function closes the directory stream @var{dirstream}. It returns
622@code{0} on success and @code{-1} on failure.
623
624The following @code{errno} error conditions are defined for this
625function:
626
627@table @code
628@item EBADF
629The @var{dirstream} argument is not valid.
630@end table
631@end deftypefun
632
633@node Simple Directory Lister
634@subsection Simple Program to List a Directory
635
636Here's a simple program that prints the names of the files in
637the current working directory:
638
639@smallexample
640@include dir.c.texi
641@end smallexample
642
643The order in which files appear in a directory tends to be fairly
644random. A more useful program would sort the entries (perhaps by
645alphabetizing them) before printing them; see
646@ref{Scanning Directory Content}, and @ref{Array Sort Function}.
647
648
649@node Random Access Directory
650@subsection Random Access in a Directory Stream
651
652@pindex dirent.h
653This section describes how to reread parts of a directory that you have
654already read from an open directory stream. All the symbols are
655declared in the header file @file{dirent.h}.
656
657@comment dirent.h
658@comment POSIX.1
659@deftypefun void rewinddir (DIR *@var{dirstream})
660@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
661The @code{rewinddir} function is used to reinitialize the directory
662stream @var{dirstream}, so that if you call @code{readdir} it
663returns information about the first entry in the directory again. This
664function also notices if files have been added or removed to the
665directory since it was opened with @code{opendir}. (Entries for these
666files might or might not be returned by @code{readdir} if they were
667added or removed since you last called @code{opendir} or
668@code{rewinddir}.)
669@end deftypefun
670
671@comment dirent.h
672@comment BSD
673@deftypefun {long int} telldir (DIR *@var{dirstream})
674@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}}
675@c The implementation is safe on most platforms, but on BSD it uses
676@c cookies, buckets and records, and the global array of pointers to
677@c dynamically allocated records is guarded by a non-recursive lock.
678The @code{telldir} function returns the file position of the directory
679stream @var{dirstream}. You can use this value with @code{seekdir} to
680restore the directory stream to that position.
681@end deftypefun
682
683@comment dirent.h
684@comment BSD
685@deftypefun void seekdir (DIR *@var{dirstream}, long int @var{pos})
686@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}}
687@c The implementation is safe on most platforms, but on BSD it uses
688@c cookies, buckets and records, and the global array of pointers to
689@c dynamically allocated records is guarded by a non-recursive lock.
690The @code{seekdir} function sets the file position of the directory
691stream @var{dirstream} to @var{pos}. The value @var{pos} must be the
692result of a previous call to @code{telldir} on this particular stream;
693closing and reopening the directory can invalidate values returned by
694@code{telldir}.
695@end deftypefun
696
697
698@node Scanning Directory Content
699@subsection Scanning the Content of a Directory
700
701A higher-level interface to the directory handling functions is the
702@code{scandir} function. With its help one can select a subset of the
703entries in a directory, possibly sort them and get a list of names as
704the result.
705
706@comment dirent.h
707@comment BSD/SVID
708@deftypefun int scandir (const char *@var{dir}, struct dirent ***@var{namelist}, int (*@var{selector}) (const struct dirent *), int (*@var{cmp}) (const struct dirent **, const struct dirent **))
709@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
710@c The scandir function calls __opendirat, __readdir, and __closedir to
711@c go over the named dir; malloc and realloc to allocate the namelist
712@c and copies of each selected dirent, besides the selector, if given,
713@c and qsort and the cmp functions if the latter is given. In spite of
714@c the cleanup handler that releases memory and the file descriptor in
715@c case of synchronous cancellation, an asynchronous cancellation may
716@c still leak memory and a file descriptor. Although readdir is unsafe
717@c in general, the use of an internal dir stream for sequential scanning
718@c of the directory with copying of dirents before subsequent calls
719@c makes the use safe, and the fact that the dir stream is private to
720@c each scandir call does away with the lock issues in readdir and
721@c closedir.
722
723The @code{scandir} function scans the contents of the directory selected
724by @var{dir}. The result in *@var{namelist} is an array of pointers to
725structure of type @code{struct dirent} which describe all selected
726directory entries and which is allocated using @code{malloc}. Instead
727of always getting all directory entries returned, the user supplied
728function @var{selector} can be used to decide which entries are in the
729result. Only the entries for which @var{selector} returns a non-zero
730value are selected.
731
732Finally the entries in *@var{namelist} are sorted using the
733user-supplied function @var{cmp}. The arguments passed to the @var{cmp}
734function are of type @code{struct dirent **}, therefore one cannot
735directly use the @code{strcmp} or @code{strcoll} functions; instead see
736the functions @code{alphasort} and @code{versionsort} below.
737
738The return value of the function is the number of entries placed in
739*@var{namelist}. If it is @code{-1} an error occurred (either the
740directory could not be opened for reading or the malloc call failed) and
741the global variable @code{errno} contains more information on the error.
742@end deftypefun
743
744As described above the fourth argument to the @code{scandir} function
745must be a pointer to a sorting function. For the convenience of the
746programmer @theglibc{} contains implementations of functions which
747are very helpful for this purpose.
748
749@comment dirent.h
750@comment BSD/SVID
751@deftypefun int alphasort (const struct dirent **@var{a}, const struct dirent **@var{b})
752@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
753@c Calls strcoll.
754The @code{alphasort} function behaves like the @code{strcoll} function
755(@pxref{String/Array Comparison}). The difference is that the arguments
756are not string pointers but instead they are of type
757@code{struct dirent **}.
758
759The return value of @code{alphasort} is less than, equal to, or greater
760than zero depending on the order of the two entries @var{a} and @var{b}.
761@end deftypefun
762
763@comment dirent.h
764@comment GNU
765@deftypefun int versionsort (const struct dirent **@var{a}, const struct dirent **@var{b})
766@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
767@c Calls strverscmp, which will accesses the locale object multiple
768@c times.
769The @code{versionsort} function is like @code{alphasort} except that it
770uses the @code{strverscmp} function internally.
771@end deftypefun
772
773If the filesystem supports large files we cannot use the @code{scandir}
774anymore since the @code{dirent} structure might not able to contain all
775the information. The LFS provides the new type @w{@code{struct
776dirent64}}. To use this we need a new function.
777
778@comment dirent.h
779@comment GNU
780@deftypefun int scandir64 (const char *@var{dir}, struct dirent64 ***@var{namelist}, int (*@var{selector}) (const struct dirent64 *), int (*@var{cmp}) (const struct dirent64 **, const struct dirent64 **))
781@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
782@c See scandir.
783The @code{scandir64} function works like the @code{scandir} function
784except that the directory entries it returns are described by elements
785of type @w{@code{struct dirent64}}. The function pointed to by
786@var{selector} is again used to select the desired entries, except that
787@var{selector} now must point to a function which takes a
788@w{@code{struct dirent64 *}} parameter.
789
790Similarly the @var{cmp} function should expect its two arguments to be
791of type @code{struct dirent64 **}.
792@end deftypefun
793
794As @var{cmp} is now a function of a different type, the functions
795@code{alphasort} and @code{versionsort} cannot be supplied for that
796argument. Instead we provide the two replacement functions below.
797
798@comment dirent.h
799@comment GNU
800@deftypefun int alphasort64 (const struct dirent64 **@var{a}, const struct dirent **@var{b})
801@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
802@c See alphasort.
803The @code{alphasort64} function behaves like the @code{strcoll} function
804(@pxref{String/Array Comparison}). The difference is that the arguments
805are not string pointers but instead they are of type
806@code{struct dirent64 **}.
807
808Return value of @code{alphasort64} is less than, equal to, or greater
809than zero depending on the order of the two entries @var{a} and @var{b}.
810@end deftypefun
811
812@comment dirent.h
813@comment GNU
814@deftypefun int versionsort64 (const struct dirent64 **@var{a}, const struct dirent64 **@var{b})
815@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
816@c See versionsort.
817The @code{versionsort64} function is like @code{alphasort64}, excepted that it
818uses the @code{strverscmp} function internally.
819@end deftypefun
820
821It is important not to mix the use of @code{scandir} and the 64-bit
822comparison functions or vice versa. There are systems on which this
823works but on others it will fail miserably.
824
825@node Simple Directory Lister Mark II
826@subsection Simple Program to List a Directory, Mark II
827
828Here is a revised version of the directory lister found above
829(@pxref{Simple Directory Lister}). Using the @code{scandir} function we
830can avoid the functions which work directly with the directory contents.
831After the call the returned entries are available for direct use.
832
833@smallexample
834@include dir2.c.texi
835@end smallexample
836
837Note the simple selector function in this example. Since we want to see
838all directory entries we always return @code{1}.
839
840
841@node Working with Directory Trees
842@section Working with Directory Trees
843@cindex directory hierarchy
844@cindex hierarchy, directory
845@cindex tree, directory
846
847The functions described so far for handling the files in a directory
848have allowed you to either retrieve the information bit by bit, or to
849process all the files as a group (see @code{scandir}). Sometimes it is
850useful to process whole hierarchies of directories and their contained
851files. The X/Open specification defines two functions to do this. The
852simpler form is derived from an early definition in @w{System V} systems
853and therefore this function is available on SVID-derived systems. The
854prototypes and required definitions can be found in the @file{ftw.h}
855header.
856
857There are four functions in this family: @code{ftw}, @code{nftw} and
858their 64-bit counterparts @code{ftw64} and @code{nftw64}. These
859functions take as one of their arguments a pointer to a callback
860function of the appropriate type.
861
862@comment ftw.h
863@comment GNU
864@deftp {Data Type} __ftw_func_t
865
866@smallexample
867int (*) (const char *, const struct stat *, int)
868@end smallexample
869
870The type of callback functions given to the @code{ftw} function. The
871first parameter points to the file name, the second parameter to an
872object of type @code{struct stat} which is filled in for the file named
873in the first parameter.
874
875@noindent
876The last parameter is a flag giving more information about the current
877file. It can have the following values:
878
879@vtable @code
880@item FTW_F
881The item is either a normal file or a file which does not fit into one
882of the following categories. This could be special files, sockets etc.
883@item FTW_D
884The item is a directory.
885@item FTW_NS
886The @code{stat} call failed and so the information pointed to by the
887second paramater is invalid.
888@item FTW_DNR
889The item is a directory which cannot be read.
890@item FTW_SL
891The item is a symbolic link. Since symbolic links are normally followed
892seeing this value in a @code{ftw} callback function means the referenced
893file does not exist. The situation for @code{nftw} is different.
894
895This value is only available if the program is compiled with
896@code{_XOPEN_EXTENDED} defined before including
897the first header. The original SVID systems do not have symbolic links.
898@end vtable
899
900If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
901type is in fact @code{__ftw64_func_t} since this mode changes
902@code{struct stat} to be @code{struct stat64}.
903@end deftp
904
905For the LFS interface and for use in the function @code{ftw64}, the
906header @file{ftw.h} defines another function type.
907
908@comment ftw.h
909@comment GNU
910@deftp {Data Type} __ftw64_func_t
911
912@smallexample
913int (*) (const char *, const struct stat64 *, int)
914@end smallexample
915
916This type is used just like @code{__ftw_func_t} for the callback
917function, but this time is called from @code{ftw64}. The second
918parameter to the function is a pointer to a variable of type
919@code{struct stat64} which is able to represent the larger values.
920@end deftp
921
922@comment ftw.h
923@comment GNU
924@deftp {Data Type} __nftw_func_t
925
926@smallexample
927int (*) (const char *, const struct stat *, int, struct FTW *)
928@end smallexample
929
930@vindex FTW_DP
931@vindex FTW_SLN
932The first three arguments are the same as for the @code{__ftw_func_t}
933type. However for the third argument some additional values are defined
934to allow finer differentiation:
935@table @code
936@item FTW_DP
937The current item is a directory and all subdirectories have already been
938visited and reported. This flag is returned instead of @code{FTW_D} if
939the @code{FTW_DEPTH} flag is passed to @code{nftw} (see below).
940@item FTW_SLN
941The current item is a stale symbolic link. The file it points to does
942not exist.
943@end table
944
945The last parameter of the callback function is a pointer to a structure
946with some extra information as described below.
947
948If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
949type is in fact @code{__nftw64_func_t} since this mode changes
950@code{struct stat} to be @code{struct stat64}.
951@end deftp
952
953For the LFS interface there is also a variant of this data type
954available which has to be used with the @code{nftw64} function.
955
956@comment ftw.h
957@comment GNU
958@deftp {Data Type} __nftw64_func_t
959
960@smallexample
961int (*) (const char *, const struct stat64 *, int, struct FTW *)
962@end smallexample
963
964This type is used just like @code{__nftw_func_t} for the callback
965function, but this time is called from @code{nftw64}. The second
966parameter to the function is this time a pointer to a variable of type
967@code{struct stat64} which is able to represent the larger values.
968@end deftp
969
970@comment ftw.h
971@comment XPG4.2
972@deftp {Data Type} {struct FTW}
973The information contained in this structure helps in interpreting the
974name parameter and gives some information about the current state of the
975traversal of the directory hierarchy.
976
977@table @code
978@item int base
979The value is the offset into the string passed in the first parameter to
980the callback function of the beginning of the file name. The rest of
981the string is the path of the file. This information is especially
982important if the @code{FTW_CHDIR} flag was set in calling @code{nftw}
983since then the current directory is the one the current item is found
984in.
985@item int level
986Whilst processing, the code tracks how many directories down it has gone
987to find the current file. This nesting level starts at @math{0} for
988files in the initial directory (or is zero for the initial file if a
989file was passed).
990@end table
991@end deftp
992
993
994@comment ftw.h
995@comment SVID
996@deftypefun int ftw (const char *@var{filename}, __ftw_func_t @var{func}, int @var{descriptors})
997@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
998@c see nftw for safety details
999The @code{ftw} function calls the callback function given in the
1000parameter @var{func} for every item which is found in the directory
1001specified by @var{filename} and all directories below. The function
1002follows symbolic links if necessary but does not process an item twice.
1003If @var{filename} is not a directory then it itself is the only object
1004returned to the callback function.
1005
1006The file name passed to the callback function is constructed by taking
1007the @var{filename} parameter and appending the names of all passed
1008directories and then the local file name. So the callback function can
1009use this parameter to access the file. @code{ftw} also calls
1010@code{stat} for the file and passes that information on to the callback
1011function. If this @code{stat} call was not successful the failure is
1012indicated by setting the third argument of the callback function to
1013@code{FTW_NS}. Otherwise it is set according to the description given
1014in the account of @code{__ftw_func_t} above.
1015
1016The callback function is expected to return @math{0} to indicate that no
1017error occurred and that processing should continue. If an error
1018occurred in the callback function or it wants @code{ftw} to return
1019immediately, the callback function can return a value other than
1020@math{0}. This is the only correct way to stop the function. The
1021program must not use @code{setjmp} or similar techniques to continue
1022from another place. This would leave resources allocated by the
1023@code{ftw} function unfreed.
1024
1025The @var{descriptors} parameter to @code{ftw} specifies how many file
1026descriptors it is allowed to consume. The function runs faster the more
1027descriptors it can use. For each level in the directory hierarchy at
1028most one descriptor is used, but for very deep ones any limit on open
1029file descriptors for the process or the system may be exceeded.
1030Moreover, file descriptor limits in a multi-threaded program apply to
1031all the threads as a group, and therefore it is a good idea to supply a
1032reasonable limit to the number of open descriptors.
1033
1034The return value of the @code{ftw} function is @math{0} if all callback
1035function calls returned @math{0} and all actions performed by the
1036@code{ftw} succeeded. If a function call failed (other than calling
1037@code{stat} on an item) the function returns @math{-1}. If a callback
1038function returns a value other than @math{0} this value is returned as
1039the return value of @code{ftw}.
1040
1041When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
104232-bit system this function is in fact @code{ftw64}, i.e., the LFS
1043interface transparently replaces the old interface.
1044@end deftypefun
1045
1046@comment ftw.h
1047@comment Unix98
1048@deftypefun int ftw64 (const char *@var{filename}, __ftw64_func_t @var{func}, int @var{descriptors})
1049@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
1050This function is similar to @code{ftw} but it can work on filesystems
1051with large files. File information is reported using a variable of type
1052@code{struct stat64} which is passed by reference to the callback
1053function.
1054
1055When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
105632-bit system this function is available under the name @code{ftw} and
1057transparently replaces the old implementation.
1058@end deftypefun
1059
1060@comment ftw.h
1061@comment XPG4.2
1062@deftypefun int nftw (const char *@var{filename}, __nftw_func_t @var{func}, int @var{descriptors}, int @var{flag})
1063@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}}
1064@c ftw_startup calls alloca, malloc, free, xstat/lxstat, tdestroy, and ftw_dir
1065@c if FTW_CHDIR, call open, and fchdir, or chdir and getcwd
1066@c ftw_dir calls open_dir_stream, readdir64, process_entry, closedir
1067@c if FTW_CHDIR, also calls fchdir
1068@c open_dir_stream calls malloc, realloc, readdir64, free, closedir,
1069@c then openat64_not_cancel_3 and fdopendir or opendir, then dirfd.
1070@c process_entry may cal realloc, fxstatat/lxstat/xstat, ftw_dir, and
1071@c find_object (tsearch) and add_object (tfind).
1072@c Since each invocation of *ftw uses its own private search tree, none
1073@c of the search tree concurrency issues apply.
1074The @code{nftw} function works like the @code{ftw} functions. They call
1075the callback function @var{func} for all items found in the directory
1076@var{filename} and below. At most @var{descriptors} file descriptors
1077are consumed during the @code{nftw} call.
1078
1079One difference is that the callback function is of a different type. It
1080is of type @w{@code{struct FTW *}} and provides the callback function
1081with the extra information described above.
1082
1083A second difference is that @code{nftw} takes a fourth argument, which
1084is @math{0} or a bitwise-OR combination of any of the following values.
1085
1086@vtable @code
1087@item FTW_PHYS
1088While traversing the directory symbolic links are not followed. Instead
1089symbolic links are reported using the @code{FTW_SL} value for the type
1090parameter to the callback function. If the file referenced by a
1091symbolic link does not exist @code{FTW_SLN} is returned instead.
1092@item FTW_MOUNT
1093The callback function is only called for items which are on the same
1094mounted filesystem as the directory given by the @var{filename}
1095parameter to @code{nftw}.
1096@item FTW_CHDIR
1097If this flag is given the current working directory is changed to the
1098directory of the reported object before the callback function is called.
1099When @code{ntfw} finally returns the current directory is restored to
1100its original value.
1101@item FTW_DEPTH
1102If this option is specified then all subdirectories and files within
1103them are processed before processing the top directory itself
1104(depth-first processing). This also means the type flag given to the
1105callback function is @code{FTW_DP} and not @code{FTW_D}.
1106@item FTW_ACTIONRETVAL
1107If this option is specified then return values from callbacks
1108are handled differently. If the callback returns @code{FTW_CONTINUE},
1109walking continues normally. @code{FTW_STOP} means walking stops
1110and @code{FTW_STOP} is returned to the caller. If @code{FTW_SKIP_SUBTREE}
1111is returned by the callback with @code{FTW_D} argument, the subtree
1112is skipped and walking continues with next sibling of the directory.
1113If @code{FTW_SKIP_SIBLINGS} is returned by the callback, all siblings
1114of the current entry are skipped and walking continues in its parent.
1115No other return values should be returned from the callbacks if
1116this option is set. This option is a GNU extension.
1117@end vtable
1118
1119The return value is computed in the same way as for @code{ftw}.
1120@code{nftw} returns @math{0} if no failures occurred and all callback
1121functions returned @math{0}. In case of internal errors, such as memory
1122problems, the return value is @math{-1} and @var{errno} is set
1123accordingly. If the return value of a callback invocation was non-zero
1124then that value is returned.
1125
1126When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
112732-bit system this function is in fact @code{nftw64}, i.e., the LFS
1128interface transparently replaces the old interface.
1129@end deftypefun
1130
1131@comment ftw.h
1132@comment Unix98
1133@deftypefun int nftw64 (const char *@var{filename}, __nftw64_func_t @var{func}, int @var{descriptors}, int @var{flag})
1134@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}}
1135This function is similar to @code{nftw} but it can work on filesystems
1136with large files. File information is reported using a variable of type
1137@code{struct stat64} which is passed by reference to the callback
1138function.
1139
1140When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
114132-bit system this function is available under the name @code{nftw} and
1142transparently replaces the old implementation.
1143@end deftypefun
1144
1145
1146@node Hard Links
1147@section Hard Links
1148@cindex hard link
1149@cindex link, hard
1150@cindex multiple names for one file
1151@cindex file names, multiple
1152
1153In POSIX systems, one file can have many names at the same time. All of
1154the names are equally real, and no one of them is preferred to the
1155others.
1156
1157To add a name to a file, use the @code{link} function. (The new name is
1158also called a @dfn{hard link} to the file.) Creating a new link to a
1159file does not copy the contents of the file; it simply makes a new name
1160by which the file can be known, in addition to the file's existing name
1161or names.
1162
1163One file can have names in several directories, so the organization
1164of the file system is not a strict hierarchy or tree.
1165
1166In most implementations, it is not possible to have hard links to the
1167same file in multiple file systems. @code{link} reports an error if you
1168try to make a hard link to the file from another file system when this
1169cannot be done.
1170
1171The prototype for the @code{link} function is declared in the header
1172file @file{unistd.h}.
1173@pindex unistd.h
1174
1175@comment unistd.h
1176@comment POSIX.1
1177@deftypefun int link (const char *@var{oldname}, const char *@var{newname})
1178@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1179The @code{link} function makes a new link to the existing file named by
1180@var{oldname}, under the new name @var{newname}.
1181
1182This function returns a value of @code{0} if it is successful and
1183@code{-1} on failure. In addition to the usual file name errors
1184(@pxref{File Name Errors}) for both @var{oldname} and @var{newname}, the
1185following @code{errno} error conditions are defined for this function:
1186
1187@table @code
1188@item EACCES
1189You are not allowed to write to the directory in which the new link is
1190to be written.
1191@ignore
1192Some implementations also require that the existing file be accessible
1193by the caller, and use this error to report failure for that reason.
1194@end ignore
1195
1196@item EEXIST
1197There is already a file named @var{newname}. If you want to replace
1198this link with a new link, you must remove the old link explicitly first.
1199
1200@item EMLINK
1201There are already too many links to the file named by @var{oldname}.
1202(The maximum number of links to a file is @w{@code{LINK_MAX}}; see
1203@ref{Limits for Files}.)
1204
1205@item ENOENT
1206The file named by @var{oldname} doesn't exist. You can't make a link to
1207a file that doesn't exist.
1208
1209@item ENOSPC
1210The directory or file system that would contain the new link is full
1211and cannot be extended.
1212
1213@item EPERM
1214On @gnulinuxhurdsystems{} and some others, you cannot make links to
1215directories.
1216Many systems allow only privileged users to do so. This error
1217is used to report the problem.
1218
1219@item EROFS
1220The directory containing the new link can't be modified because it's on
1221a read-only file system.
1222
1223@item EXDEV
1224The directory specified in @var{newname} is on a different file system
1225than the existing file.
1226
1227@item EIO
1228A hardware error occurred while trying to read or write the to filesystem.
1229@end table
1230@end deftypefun
1231
1232@node Symbolic Links
1233@section Symbolic Links
1234@cindex soft link
1235@cindex link, soft
1236@cindex symbolic link
1237@cindex link, symbolic
1238
1239@gnusystems{} support @dfn{soft links} or @dfn{symbolic links}. This
1240is a kind of ``file'' that is essentially a pointer to another file
1241name. Unlike hard links, symbolic links can be made to directories or
1242across file systems with no restrictions. You can also make a symbolic
1243link to a name which is not the name of any file. (Opening this link
1244will fail until a file by that name is created.) Likewise, if the
1245symbolic link points to an existing file which is later deleted, the
1246symbolic link continues to point to the same file name even though the
1247name no longer names any file.
1248
1249The reason symbolic links work the way they do is that special things
1250happen when you try to open the link. The @code{open} function realizes
1251you have specified the name of a link, reads the file name contained in
1252the link, and opens that file name instead. The @code{stat} function
1253likewise operates on the file that the symbolic link points to, instead
1254of on the link itself.
1255
1256By contrast, other operations such as deleting or renaming the file
1257operate on the link itself. The functions @code{readlink} and
1258@code{lstat} also refrain from following symbolic links, because their
1259purpose is to obtain information about the link. @code{link}, the
1260function that makes a hard link, does too. It makes a hard link to the
1261symbolic link, which one rarely wants.
1262
1263Some systems have for some functions operating on files have a limit on
1264how many symbolic links are followed when resolving a path name. The
1265limit if it exists is published in the @file{sys/param.h} header file.
1266
1267@comment sys/param.h
1268@comment BSD
1269@deftypevr Macro int MAXSYMLINKS
1270
1271The macro @code{MAXSYMLINKS} specifies how many symlinks some function
1272will follow before returning @code{ELOOP}. Not all functions behave the
1273same and this value is not the same a that returned for
1274@code{_SC_SYMLOOP} by @code{sysconf}. In fact, the @code{sysconf}
1275result can indicate that there is no fixed limit although
1276@code{MAXSYMLINKS} exists and has a finite value.
1277@end deftypevr
1278
1279Prototypes for most of the functions listed in this section are in
1280@file{unistd.h}.
1281@pindex unistd.h
1282
1283@comment unistd.h
1284@comment BSD
1285@deftypefun int symlink (const char *@var{oldname}, const char *@var{newname})
1286@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1287The @code{symlink} function makes a symbolic link to @var{oldname} named
1288@var{newname}.
1289
1290The normal return value from @code{symlink} is @code{0}. A return value
1291of @code{-1} indicates an error. In addition to the usual file name
1292syntax errors (@pxref{File Name Errors}), the following @code{errno}
1293error conditions are defined for this function:
1294
1295@table @code
1296@item EEXIST
1297There is already an existing file named @var{newname}.
1298
1299@item EROFS
1300The file @var{newname} would exist on a read-only file system.
1301
1302@item ENOSPC
1303The directory or file system cannot be extended to make the new link.
1304
1305@item EIO
1306A hardware error occurred while reading or writing data on the disk.
1307
1308@ignore
1309@comment not sure about these
1310@item ELOOP
1311There are too many levels of indirection. This can be the result of
1312circular symbolic links to directories.
1313
1314@item EDQUOT
1315The new link can't be created because the user's disk quota has been
1316exceeded.
1317@end ignore
1318@end table
1319@end deftypefun
1320
1321@comment unistd.h
1322@comment BSD
1323@deftypefun ssize_t readlink (const char *@var{filename}, char *@var{buffer}, size_t @var{size})
1324@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1325The @code{readlink} function gets the value of the symbolic link
1326@var{filename}. The file name that the link points to is copied into
1327@var{buffer}. This file name string is @emph{not} null-terminated;
1328@code{readlink} normally returns the number of characters copied. The
1329@var{size} argument specifies the maximum number of characters to copy,
1330usually the allocation size of @var{buffer}.
1331
1332If the return value equals @var{size}, you cannot tell whether or not
1333there was room to return the entire name. So make a bigger buffer and
1334call @code{readlink} again. Here is an example:
1335
1336@smallexample
1337char *
1338readlink_malloc (const char *filename)
1339@{
1340 int size = 100;
1341 char *buffer = NULL;
1342
1343 while (1)
1344 @{
1345 buffer = (char *) xrealloc (buffer, size);
1346 int nchars = readlink (filename, buffer, size);
1347 if (nchars < 0)
1348 @{
1349 free (buffer);
1350 return NULL;
1351 @}
1352 if (nchars < size)
1353 return buffer;
1354 size *= 2;
1355 @}
1356@}
1357@end smallexample
1358
1359@c @group Invalid outside example.
1360A value of @code{-1} is returned in case of error. In addition to the
1361usual file name errors (@pxref{File Name Errors}), the following
1362@code{errno} error conditions are defined for this function:
1363
1364@table @code
1365@item EINVAL
1366The named file is not a symbolic link.
1367
1368@item EIO
1369A hardware error occurred while reading or writing data on the disk.
1370@end table
1371@c @end group
1372@end deftypefun
1373
1374In some situations it is desirable to resolve all the
1375symbolic links to get the real
1376name of a file where no prefix names a symbolic link which is followed
1377and no filename in the path is @code{.} or @code{..}. This is for
1378instance desirable if files have to be compare in which case different
1379names can refer to the same inode.
1380
1381@comment stdlib.h
1382@comment GNU
1383@deftypefun {char *} canonicalize_file_name (const char *@var{name})
1384@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
1385@c Calls realpath.
1386
1387The @code{canonicalize_file_name} function returns the absolute name of
1388the file named by @var{name} which contains no @code{.}, @code{..}
1389components nor any repeated path separators (@code{/}) or symlinks. The
1390result is passed back as the return value of the function in a block of
1391memory allocated with @code{malloc}. If the result is not used anymore
1392the memory should be freed with a call to @code{free}.
1393
1394If any of the path components is missing the function returns a NULL
1395pointer. This is also what is returned if the length of the path
1396reaches or exceeds @code{PATH_MAX} characters. In any case
1397@code{errno} is set accordingly.
1398
1399@table @code
1400@item ENAMETOOLONG
1401The resulting path is too long. This error only occurs on systems which
1402have a limit on the file name length.
1403
1404@item EACCES
1405At least one of the path components is not readable.
1406
1407@item ENOENT
1408The input file name is empty.
1409
1410@item ENOENT
1411At least one of the path components does not exist.
1412
1413@item ELOOP
1414More than @code{MAXSYMLINKS} many symlinks have been followed.
1415@end table
1416
1417This function is a GNU extension and is declared in @file{stdlib.h}.
1418@end deftypefun
1419
1420The Unix standard includes a similar function which differs from
1421@code{canonicalize_file_name} in that the user has to provide the buffer
1422where the result is placed in.
1423
1424@comment stdlib.h
1425@comment XPG
1426@deftypefun {char *} realpath (const char *restrict @var{name}, char *restrict @var{resolved})
1427@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
1428@c Calls malloc, realloc, getcwd, lxstat64, readlink, alloca.
1429
1430A call to @code{realpath} where the @var{resolved} parameter is
1431@code{NULL} behaves exactly like @code{canonicalize_file_name}. The
1432function allocates a buffer for the file name and returns a pointer to
1433it. If @var{resolved} is not @code{NULL} it points to a buffer into
1434which the result is copied. It is the callers responsibility to
1435allocate a buffer which is large enough. On systems which define
1436@code{PATH_MAX} this means the buffer must be large enough for a
1437pathname of this size. For systems without limitations on the pathname
1438length the requirement cannot be met and programs should not call
1439@code{realpath} with anything but @code{NULL} for the second parameter.
1440
1441One other difference is that the buffer @var{resolved} (if nonzero) will
1442contain the part of the path component which does not exist or is not
1443readable if the function returns @code{NULL} and @code{errno} is set to
1444@code{EACCES} or @code{ENOENT}.
1445
1446This function is declared in @file{stdlib.h}.
1447@end deftypefun
1448
1449The advantage of using this function is that it is more widely
1450available. The drawback is that it reports failures for long path on
1451systems which have no limits on the file name length.
1452
1453@node Deleting Files
1454@section Deleting Files
1455@cindex deleting a file
1456@cindex removing a file
1457@cindex unlinking a file
1458
1459You can delete a file with @code{unlink} or @code{remove}.
1460
1461Deletion actually deletes a file name. If this is the file's only name,
1462then the file is deleted as well. If the file has other remaining names
1463(@pxref{Hard Links}), it remains accessible under those names.
1464
1465@comment unistd.h
1466@comment POSIX.1
1467@deftypefun int unlink (const char *@var{filename})
1468@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1469The @code{unlink} function deletes the file name @var{filename}. If
1470this is a file's sole name, the file itself is also deleted. (Actually,
1471if any process has the file open when this happens, deletion is
1472postponed until all processes have closed the file.)
1473
1474@pindex unistd.h
1475The function @code{unlink} is declared in the header file @file{unistd.h}.
1476
1477This function returns @code{0} on successful completion, and @code{-1}
1478on error. In addition to the usual file name errors
1479(@pxref{File Name Errors}), the following @code{errno} error conditions are
1480defined for this function:
1481
1482@table @code
1483@item EACCES
1484Write permission is denied for the directory from which the file is to be
1485removed, or the directory has the sticky bit set and you do not own the file.
1486
1487@item EBUSY
1488This error indicates that the file is being used by the system in such a
1489way that it can't be unlinked. For example, you might see this error if
1490the file name specifies the root directory or a mount point for a file
1491system.
1492
1493@item ENOENT
1494The file name to be deleted doesn't exist.
1495
1496@item EPERM
1497On some systems @code{unlink} cannot be used to delete the name of a
1498directory, or at least can only be used this way by a privileged user.
1499To avoid such problems, use @code{rmdir} to delete directories. (On
1500@gnulinuxhurdsystems{} @code{unlink} can never delete the name of a directory.)
1501
1502@item EROFS
1503The directory containing the file name to be deleted is on a read-only
1504file system and can't be modified.
1505@end table
1506@end deftypefun
1507
1508@comment unistd.h
1509@comment POSIX.1
1510@deftypefun int rmdir (const char *@var{filename})
1511@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1512@cindex directories, deleting
1513@cindex deleting a directory
1514The @code{rmdir} function deletes a directory. The directory must be
1515empty before it can be removed; in other words, it can only contain
1516entries for @file{.} and @file{..}.
1517
1518In most other respects, @code{rmdir} behaves like @code{unlink}. There
1519are two additional @code{errno} error conditions defined for
1520@code{rmdir}:
1521
1522@table @code
1523@item ENOTEMPTY
1524@itemx EEXIST
1525The directory to be deleted is not empty.
1526@end table
1527
1528These two error codes are synonymous; some systems use one, and some use
1529the other. @gnulinuxhurdsystems{} always use @code{ENOTEMPTY}.
1530
1531The prototype for this function is declared in the header file
1532@file{unistd.h}.
1533@pindex unistd.h
1534@end deftypefun
1535
1536@comment stdio.h
1537@comment ISO
1538@deftypefun int remove (const char *@var{filename})
1539@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1540@c Calls unlink and rmdir.
1541This is the @w{ISO C} function to remove a file. It works like
1542@code{unlink} for files and like @code{rmdir} for directories.
1543@code{remove} is declared in @file{stdio.h}.
1544@pindex stdio.h
1545@end deftypefun
1546
1547@node Renaming Files
1548@section Renaming Files
1549
1550The @code{rename} function is used to change a file's name.
1551
1552@cindex renaming a file
1553@comment stdio.h
1554@comment ISO
1555@deftypefun int rename (const char *@var{oldname}, const char *@var{newname})
1556@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1557@c In the absence of a rename syscall, there's an emulation with link
1558@c and unlink, but it's racy, even more so if newname exists and is
1559@c unlinked first.
1560The @code{rename} function renames the file @var{oldname} to
1561@var{newname}. The file formerly accessible under the name
1562@var{oldname} is afterwards accessible as @var{newname} instead. (If
1563the file had any other names aside from @var{oldname}, it continues to
1564have those names.)
1565
1566The directory containing the name @var{newname} must be on the same file
1567system as the directory containing the name @var{oldname}.
1568
1569One special case for @code{rename} is when @var{oldname} and
1570@var{newname} are two names for the same file. The consistent way to
1571handle this case is to delete @var{oldname}. However, in this case
1572POSIX requires that @code{rename} do nothing and report success---which
1573is inconsistent. We don't know what your operating system will do.
1574
1575If @var{oldname} is not a directory, then any existing file named
1576@var{newname} is removed during the renaming operation. However, if
1577@var{newname} is the name of a directory, @code{rename} fails in this
1578case.
1579
1580If @var{oldname} is a directory, then either @var{newname} must not
1581exist or it must name a directory that is empty. In the latter case,
1582the existing directory named @var{newname} is deleted first. The name
1583@var{newname} must not specify a subdirectory of the directory
1584@code{oldname} which is being renamed.
1585
1586One useful feature of @code{rename} is that the meaning of @var{newname}
1587changes ``atomically'' from any previously existing file by that name to
1588its new meaning (i.e., the file that was called @var{oldname}). There is
1589no instant at which @var{newname} is non-existent ``in between'' the old
1590meaning and the new meaning. If there is a system crash during the
1591operation, it is possible for both names to still exist; but
1592@var{newname} will always be intact if it exists at all.
1593
1594If @code{rename} fails, it returns @code{-1}. In addition to the usual
1595file name errors (@pxref{File Name Errors}), the following
1596@code{errno} error conditions are defined for this function:
1597
1598@table @code
1599@item EACCES
1600One of the directories containing @var{newname} or @var{oldname}
1601refuses write permission; or @var{newname} and @var{oldname} are
1602directories and write permission is refused for one of them.
1603
1604@item EBUSY
1605A directory named by @var{oldname} or @var{newname} is being used by
1606the system in a way that prevents the renaming from working. This includes
1607directories that are mount points for filesystems, and directories
1608that are the current working directories of processes.
1609
1610@item ENOTEMPTY
1611@itemx EEXIST
1612The directory @var{newname} isn't empty. @gnulinuxhurdsystems{} always return
1613@code{ENOTEMPTY} for this, but some other systems return @code{EEXIST}.
1614
1615@item EINVAL
1616@var{oldname} is a directory that contains @var{newname}.
1617
1618@item EISDIR
1619@var{newname} is a directory but the @var{oldname} isn't.
1620
1621@item EMLINK
1622The parent directory of @var{newname} would have too many links
1623(entries).
1624
1625@item ENOENT
1626The file @var{oldname} doesn't exist.
1627
1628@item ENOSPC
1629The directory that would contain @var{newname} has no room for another
1630entry, and there is no space left in the file system to expand it.
1631
1632@item EROFS
1633The operation would involve writing to a directory on a read-only file
1634system.
1635
1636@item EXDEV
1637The two file names @var{newname} and @var{oldname} are on different
1638file systems.
1639@end table
1640@end deftypefun
1641
1642@node Creating Directories
1643@section Creating Directories
1644@cindex creating a directory
1645@cindex directories, creating
1646
1647@pindex mkdir
1648Directories are created with the @code{mkdir} function. (There is also
1649a shell command @code{mkdir} which does the same thing.)
1650@c !!! umask
1651
1652@comment sys/stat.h
1653@comment POSIX.1
1654@deftypefun int mkdir (const char *@var{filename}, mode_t @var{mode})
1655@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1656The @code{mkdir} function creates a new, empty directory with name
1657@var{filename}.
1658
1659The argument @var{mode} specifies the file permissions for the new
1660directory file. @xref{Permission Bits}, for more information about
1661this.
1662
1663A return value of @code{0} indicates successful completion, and
1664@code{-1} indicates failure. In addition to the usual file name syntax
1665errors (@pxref{File Name Errors}), the following @code{errno} error
1666conditions are defined for this function:
1667
1668@table @code
1669@item EACCES
1670Write permission is denied for the parent directory in which the new
1671directory is to be added.
1672
1673@item EEXIST
1674A file named @var{filename} already exists.
1675
1676@item EMLINK
1677The parent directory has too many links (entries).
1678
1679Well-designed file systems never report this error, because they permit
1680more links than your disk could possibly hold. However, you must still
1681take account of the possibility of this error, as it could result from
1682network access to a file system on another machine.
1683
1684@item ENOSPC
1685The file system doesn't have enough room to create the new directory.
1686
1687@item EROFS
1688The parent directory of the directory being created is on a read-only
1689file system and cannot be modified.
1690@end table
1691
1692To use this function, your program should include the header file
1693@file{sys/stat.h}.
1694@pindex sys/stat.h
1695@end deftypefun
1696
1697@node File Attributes
1698@section File Attributes
1699
1700@pindex ls
1701When you issue an @samp{ls -l} shell command on a file, it gives you
1702information about the size of the file, who owns it, when it was last
1703modified, etc. These are called the @dfn{file attributes}, and are
1704associated with the file itself and not a particular one of its names.
1705
1706This section contains information about how you can inquire about and
1707modify the attributes of a file.
1708
1709@menu
1710* Attribute Meanings:: The names of the file attributes,
1711 and what their values mean.
1712* Reading Attributes:: How to read the attributes of a file.
1713* Testing File Type:: Distinguishing ordinary files,
1714 directories, links@dots{}
1715* File Owner:: How ownership for new files is determined,
1716 and how to change it.
1717* Permission Bits:: How information about a file's access
1718 mode is stored.
1719* Access Permission:: How the system decides who can access a file.
1720* Setting Permissions:: How permissions for new files are assigned,
1721 and how to change them.
1722* Testing File Access:: How to find out if your process can
1723 access a file.
1724* File Times:: About the time attributes of a file.
1725* File Size:: Manually changing the size of a file.
1726* Storage Allocation:: Allocate backing storage for files.
1727@end menu
1728
1729@node Attribute Meanings
1730@subsection The meaning of the File Attributes
1731@cindex status of a file
1732@cindex attributes of a file
1733@cindex file attributes
1734
1735When you read the attributes of a file, they come back in a structure
1736called @code{struct stat}. This section describes the names of the
1737attributes, their data types, and what they mean. For the functions
1738to read the attributes of a file, see @ref{Reading Attributes}.
1739
1740The header file @file{sys/stat.h} declares all the symbols defined
1741in this section.
1742@pindex sys/stat.h
1743
1744@comment sys/stat.h
1745@comment POSIX.1
1746@deftp {Data Type} {struct stat}
1747The @code{stat} structure type is used to return information about the
1748attributes of a file. It contains at least the following members:
1749
1750@table @code
1751@item mode_t st_mode
1752Specifies the mode of the file. This includes file type information
1753(@pxref{Testing File Type}) and the file permission bits
1754(@pxref{Permission Bits}).
1755
1756@item ino_t st_ino
1757The file serial number, which distinguishes this file from all other
1758files on the same device.
1759
1760@item dev_t st_dev
1761Identifies the device containing the file. The @code{st_ino} and
1762@code{st_dev}, taken together, uniquely identify the file. The
1763@code{st_dev} value is not necessarily consistent across reboots or
1764system crashes, however.
1765
1766@item nlink_t st_nlink
1767The number of hard links to the file. This count keeps track of how
1768many directories have entries for this file. If the count is ever
1769decremented to zero, then the file itself is discarded as soon as no
1770process still holds it open. Symbolic links are not counted in the
1771total.
1772
1773@item uid_t st_uid
1774The user ID of the file's owner. @xref{File Owner}.
1775
1776@item gid_t st_gid
1777The group ID of the file. @xref{File Owner}.
1778
1779@item off_t st_size
1780This specifies the size of a regular file in bytes. For files that are
1781really devices this field isn't usually meaningful. For symbolic links
1782this specifies the length of the file name the link refers to.
1783
1784@item time_t st_atime
1785This is the last access time for the file. @xref{File Times}.
1786
1787@item unsigned long int st_atime_usec
1788This is the fractional part of the last access time for the file.
1789@xref{File Times}.
1790
1791@item time_t st_mtime
1792This is the time of the last modification to the contents of the file.
1793@xref{File Times}.
1794
1795@item unsigned long int st_mtime_usec
1796This is the fractional part of the time of the last modification to the
1797contents of the file. @xref{File Times}.
1798
1799@item time_t st_ctime
1800This is the time of the last modification to the attributes of the file.
1801@xref{File Times}.
1802
1803@item unsigned long int st_ctime_usec
1804This is the fractional part of the time of the last modification to the
1805attributes of the file. @xref{File Times}.
1806
1807@c !!! st_rdev
1808@item blkcnt_t st_blocks
1809This is the amount of disk space that the file occupies, measured in
1810units of 512-byte blocks.
1811
1812The number of disk blocks is not strictly proportional to the size of
1813the file, for two reasons: the file system may use some blocks for
1814internal record keeping; and the file may be sparse---it may have
1815``holes'' which contain zeros but do not actually take up space on the
1816disk.
1817
1818You can tell (approximately) whether a file is sparse by comparing this
1819value with @code{st_size}, like this:
1820
1821@smallexample
1822(st.st_blocks * 512 < st.st_size)
1823@end smallexample
1824
1825This test is not perfect because a file that is just slightly sparse
1826might not be detected as sparse at all. For practical applications,
1827this is not a problem.
1828
1829@item unsigned int st_blksize
1830The optimal block size for reading of writing this file, in bytes. You
1831might use this size for allocating the buffer space for reading of
1832writing the file. (This is unrelated to @code{st_blocks}.)
1833@end table
1834@end deftp
1835
1836The extensions for the Large File Support (LFS) require, even on 32-bit
1837machines, types which can handle file sizes up to @twoexp{63}.
1838Therefore a new definition of @code{struct stat} is necessary.
1839
1840@comment sys/stat.h
1841@comment LFS
1842@deftp {Data Type} {struct stat64}
1843The members of this type are the same and have the same names as those
1844in @code{struct stat}. The only difference is that the members
1845@code{st_ino}, @code{st_size}, and @code{st_blocks} have a different
1846type to support larger values.
1847
1848@table @code
1849@item mode_t st_mode
1850Specifies the mode of the file. This includes file type information
1851(@pxref{Testing File Type}) and the file permission bits
1852(@pxref{Permission Bits}).
1853
1854@item ino64_t st_ino
1855The file serial number, which distinguishes this file from all other
1856files on the same device.
1857
1858@item dev_t st_dev
1859Identifies the device containing the file. The @code{st_ino} and
1860@code{st_dev}, taken together, uniquely identify the file. The
1861@code{st_dev} value is not necessarily consistent across reboots or
1862system crashes, however.
1863
1864@item nlink_t st_nlink
1865The number of hard links to the file. This count keeps track of how
1866many directories have entries for this file. If the count is ever
1867decremented to zero, then the file itself is discarded as soon as no
1868process still holds it open. Symbolic links are not counted in the
1869total.
1870
1871@item uid_t st_uid
1872The user ID of the file's owner. @xref{File Owner}.
1873
1874@item gid_t st_gid
1875The group ID of the file. @xref{File Owner}.
1876
1877@item off64_t st_size
1878This specifies the size of a regular file in bytes. For files that are
1879really devices this field isn't usually meaningful. For symbolic links
1880this specifies the length of the file name the link refers to.
1881
1882@item time_t st_atime
1883This is the last access time for the file. @xref{File Times}.
1884
1885@item unsigned long int st_atime_usec
1886This is the fractional part of the last access time for the file.
1887@xref{File Times}.
1888
1889@item time_t st_mtime
1890This is the time of the last modification to the contents of the file.
1891@xref{File Times}.
1892
1893@item unsigned long int st_mtime_usec
1894This is the fractional part of the time of the last modification to the
1895contents of the file. @xref{File Times}.
1896
1897@item time_t st_ctime
1898This is the time of the last modification to the attributes of the file.
1899@xref{File Times}.
1900
1901@item unsigned long int st_ctime_usec
1902This is the fractional part of the time of the last modification to the
1903attributes of the file. @xref{File Times}.
1904
1905@c !!! st_rdev
1906@item blkcnt64_t st_blocks
1907This is the amount of disk space that the file occupies, measured in
1908units of 512-byte blocks.
1909
1910@item unsigned int st_blksize
1911The optimal block size for reading of writing this file, in bytes. You
1912might use this size for allocating the buffer space for reading of
1913writing the file. (This is unrelated to @code{st_blocks}.)
1914@end table
1915@end deftp
1916
1917Some of the file attributes have special data type names which exist
1918specifically for those attributes. (They are all aliases for well-known
1919integer types that you know and love.) These typedef names are defined
1920in the header file @file{sys/types.h} as well as in @file{sys/stat.h}.
1921Here is a list of them.
1922
1923@comment sys/types.h
1924@comment POSIX.1
1925@deftp {Data Type} mode_t
1926This is an integer data type used to represent file modes. In
1927@theglibc{}, this is an unsigned type no narrower than @code{unsigned
1928int}.
1929@end deftp
1930
1931@cindex inode number
1932@comment sys/types.h
1933@comment POSIX.1
1934@deftp {Data Type} ino_t
1935This is an unsigned integer type used to represent file serial numbers.
1936(In Unix jargon, these are sometimes called @dfn{inode numbers}.)
1937In @theglibc{}, this type is no narrower than @code{unsigned int}.
1938
1939If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type
1940is transparently replaced by @code{ino64_t}.
1941@end deftp
1942
1943@comment sys/types.h
1944@comment Unix98
1945@deftp {Data Type} ino64_t
1946This is an unsigned integer type used to represent file serial numbers
1947for the use in LFS. In @theglibc{}, this type is no narrower than
1948@code{unsigned int}.
1949
1950When compiling with @code{_FILE_OFFSET_BITS == 64} this type is
1951available under the name @code{ino_t}.
1952@end deftp
1953
1954@comment sys/types.h
1955@comment POSIX.1
1956@deftp {Data Type} dev_t
1957This is an arithmetic data type used to represent file device numbers.
1958In @theglibc{}, this is an integer type no narrower than @code{int}.
1959@end deftp
1960
1961@comment sys/types.h
1962@comment POSIX.1
1963@deftp {Data Type} nlink_t
1964This is an integer type used to represent file link counts.
1965@end deftp
1966
1967@comment sys/types.h
1968@comment Unix98
1969@deftp {Data Type} blkcnt_t
1970This is a signed integer type used to represent block counts.
1971In @theglibc{}, this type is no narrower than @code{int}.
1972
1973If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type
1974is transparently replaced by @code{blkcnt64_t}.
1975@end deftp
1976
1977@comment sys/types.h
1978@comment Unix98
1979@deftp {Data Type} blkcnt64_t
1980This is a signed integer type used to represent block counts for the
1981use in LFS. In @theglibc{}, this type is no narrower than @code{int}.
1982
1983When compiling with @code{_FILE_OFFSET_BITS == 64} this type is
1984available under the name @code{blkcnt_t}.
1985@end deftp
1986
1987@node Reading Attributes
1988@subsection Reading the Attributes of a File
1989
1990To examine the attributes of files, use the functions @code{stat},
1991@code{fstat} and @code{lstat}. They return the attribute information in
1992a @code{struct stat} object. All three functions are declared in the
1993header file @file{sys/stat.h}.
1994
1995@comment sys/stat.h
1996@comment POSIX.1
1997@deftypefun int stat (const char *@var{filename}, struct stat *@var{buf})
1998@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1999The @code{stat} function returns information about the attributes of the
2000file named by @w{@var{filename}} in the structure pointed to by @var{buf}.
2001
2002If @var{filename} is the name of a symbolic link, the attributes you get
2003describe the file that the link points to. If the link points to a
2004nonexistent file name, then @code{stat} fails reporting a nonexistent
2005file.
2006
2007The return value is @code{0} if the operation is successful, or
2008@code{-1} on failure. In addition to the usual file name errors
2009(@pxref{File Name Errors}, the following @code{errno} error conditions
2010are defined for this function:
2011
2012@table @code
2013@item ENOENT
2014The file named by @var{filename} doesn't exist.
2015@end table
2016
2017When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2018function is in fact @code{stat64} since the LFS interface transparently
2019replaces the normal implementation.
2020@end deftypefun
2021
2022@comment sys/stat.h
2023@comment Unix98
2024@deftypefun int stat64 (const char *@var{filename}, struct stat64 *@var{buf})
2025@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2026This function is similar to @code{stat} but it is also able to work on
2027files larger than @twoexp{31} bytes on 32-bit systems. To be able to do
2028this the result is stored in a variable of type @code{struct stat64} to
2029which @var{buf} must point.
2030
2031When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2032function is available under the name @code{stat} and so transparently
2033replaces the interface for small files on 32-bit machines.
2034@end deftypefun
2035
2036@comment sys/stat.h
2037@comment POSIX.1
2038@deftypefun int fstat (int @var{filedes}, struct stat *@var{buf})
2039@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2040The @code{fstat} function is like @code{stat}, except that it takes an
2041open file descriptor as an argument instead of a file name.
2042@xref{Low-Level I/O}.
2043
2044Like @code{stat}, @code{fstat} returns @code{0} on success and @code{-1}
2045on failure. The following @code{errno} error conditions are defined for
2046@code{fstat}:
2047
2048@table @code
2049@item EBADF
2050The @var{filedes} argument is not a valid file descriptor.
2051@end table
2052
2053When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2054function is in fact @code{fstat64} since the LFS interface transparently
2055replaces the normal implementation.
2056@end deftypefun
2057
2058@comment sys/stat.h
2059@comment Unix98
2060@deftypefun int fstat64 (int @var{filedes}, struct stat64 *@var{buf})
2061@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2062This function is similar to @code{fstat} but is able to work on large
2063files on 32-bit platforms. For large files the file descriptor
2064@var{filedes} should be obtained by @code{open64} or @code{creat64}.
2065The @var{buf} pointer points to a variable of type @code{struct stat64}
2066which is able to represent the larger values.
2067
2068When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2069function is available under the name @code{fstat} and so transparently
2070replaces the interface for small files on 32-bit machines.
2071@end deftypefun
2072
2073@c fstatat will call alloca and snprintf if the syscall is not
2074@c available.
2075@c @safety{@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
2076
2077@comment sys/stat.h
2078@comment BSD
2079@deftypefun int lstat (const char *@var{filename}, struct stat *@var{buf})
2080@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2081@c Direct system call through lxstat, sometimes with an xstat conv call
2082@c afterwards.
2083The @code{lstat} function is like @code{stat}, except that it does not
2084follow symbolic links. If @var{filename} is the name of a symbolic
2085link, @code{lstat} returns information about the link itself; otherwise
2086@code{lstat} works like @code{stat}. @xref{Symbolic Links}.
2087
2088When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2089function is in fact @code{lstat64} since the LFS interface transparently
2090replaces the normal implementation.
2091@end deftypefun
2092
2093@comment sys/stat.h
2094@comment Unix98
2095@deftypefun int lstat64 (const char *@var{filename}, struct stat64 *@var{buf})
2096@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2097@c Direct system call through lxstat64, sometimes with an xstat conv
2098@c call afterwards.
2099This function is similar to @code{lstat} but it is also able to work on
2100files larger than @twoexp{31} bytes on 32-bit systems. To be able to do
2101this the result is stored in a variable of type @code{struct stat64} to
2102which @var{buf} must point.
2103
2104When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2105function is available under the name @code{lstat} and so transparently
2106replaces the interface for small files on 32-bit machines.
2107@end deftypefun
2108
2109@node Testing File Type
2110@subsection Testing the Type of a File
2111
2112The @dfn{file mode}, stored in the @code{st_mode} field of the file
2113attributes, contains two kinds of information: the file type code, and
2114the access permission bits. This section discusses only the type code,
2115which you can use to tell whether the file is a directory, socket,
2116symbolic link, and so on. For details about access permissions see
2117@ref{Permission Bits}.
2118
2119There are two ways you can access the file type information in a file
2120mode. Firstly, for each file type there is a @dfn{predicate macro}
2121which examines a given file mode and returns whether it is of that type
2122or not. Secondly, you can mask out the rest of the file mode to leave
2123just the file type code, and compare this against constants for each of
2124the supported file types.
2125
2126All of the symbols listed in this section are defined in the header file
2127@file{sys/stat.h}.
2128@pindex sys/stat.h
2129
2130The following predicate macros test the type of a file, given the value
2131@var{m} which is the @code{st_mode} field returned by @code{stat} on
2132that file:
2133
2134@comment sys/stat.h
2135@comment POSIX
2136@deftypefn Macro int S_ISDIR (mode_t @var{m})
2137@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2138This macro returns non-zero if the file is a directory.
2139@end deftypefn
2140
2141@comment sys/stat.h
2142@comment POSIX
2143@deftypefn Macro int S_ISCHR (mode_t @var{m})
2144@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2145This macro returns non-zero if the file is a character special file (a
2146device like a terminal).
2147@end deftypefn
2148
2149@comment sys/stat.h
2150@comment POSIX
2151@deftypefn Macro int S_ISBLK (mode_t @var{m})
2152@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2153This macro returns non-zero if the file is a block special file (a device
2154like a disk).
2155@end deftypefn
2156
2157@comment sys/stat.h
2158@comment POSIX
2159@deftypefn Macro int S_ISREG (mode_t @var{m})
2160@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2161This macro returns non-zero if the file is a regular file.
2162@end deftypefn
2163
2164@comment sys/stat.h
2165@comment POSIX
2166@deftypefn Macro int S_ISFIFO (mode_t @var{m})
2167@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2168This macro returns non-zero if the file is a FIFO special file, or a
2169pipe. @xref{Pipes and FIFOs}.
2170@end deftypefn
2171
2172@comment sys/stat.h
2173@comment GNU
2174@deftypefn Macro int S_ISLNK (mode_t @var{m})
2175@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2176This macro returns non-zero if the file is a symbolic link.
2177@xref{Symbolic Links}.
2178@end deftypefn
2179
2180@comment sys/stat.h
2181@comment GNU
2182@deftypefn Macro int S_ISSOCK (mode_t @var{m})
2183@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2184This macro returns non-zero if the file is a socket. @xref{Sockets}.
2185@end deftypefn
2186
2187An alternate non-POSIX method of testing the file type is supported for
2188compatibility with BSD. The mode can be bitwise AND-ed with
2189@code{S_IFMT} to extract the file type code, and compared to the
2190appropriate constant. For example,
2191
2192@smallexample
2193S_ISCHR (@var{mode})
2194@end smallexample
2195
2196@noindent
2197is equivalent to:
2198
2199@smallexample
2200((@var{mode} & S_IFMT) == S_IFCHR)
2201@end smallexample
2202
2203@comment sys/stat.h
2204@comment BSD
2205@deftypevr Macro int S_IFMT
2206This is a bit mask used to extract the file type code from a mode value.
2207@end deftypevr
2208
2209These are the symbolic names for the different file type codes:
2210
2211@table @code
2212@comment sys/stat.h
2213@comment BSD
2214@item S_IFDIR
2215@vindex S_IFDIR
2216This is the file type constant of a directory file.
2217
2218@comment sys/stat.h
2219@comment BSD
2220@item S_IFCHR
2221@vindex S_IFCHR
2222This is the file type constant of a character-oriented device file.
2223
2224@comment sys/stat.h
2225@comment BSD
2226@item S_IFBLK
2227@vindex S_IFBLK
2228This is the file type constant of a block-oriented device file.
2229
2230@comment sys/stat.h
2231@comment BSD
2232@item S_IFREG
2233@vindex S_IFREG
2234This is the file type constant of a regular file.
2235
2236@comment sys/stat.h
2237@comment BSD
2238@item S_IFLNK
2239@vindex S_IFLNK
2240This is the file type constant of a symbolic link.
2241
2242@comment sys/stat.h
2243@comment BSD
2244@item S_IFSOCK
2245@vindex S_IFSOCK
2246This is the file type constant of a socket.
2247
2248@comment sys/stat.h
2249@comment BSD
2250@item S_IFIFO
2251@vindex S_IFIFO
2252This is the file type constant of a FIFO or pipe.
2253@end table
2254
2255The POSIX.1b standard introduced a few more objects which possibly can
2256be implemented as object in the filesystem. These are message queues,
2257semaphores, and shared memory objects. To allow differentiating these
2258objects from other files the POSIX standard introduces three new test
2259macros. But unlike the other macros it does not take the value of the
2260@code{st_mode} field as the parameter. Instead they expect a pointer to
2261the whole @code{struct stat} structure.
2262
2263@comment sys/stat.h
2264@comment POSIX
2265@deftypefn Macro int S_TYPEISMQ (struct stat *@var{s})
2266@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2267If the system implement POSIX message queues as distinct objects and the
2268file is a message queue object, this macro returns a non-zero value.
2269In all other cases the result is zero.
2270@end deftypefn
2271
2272@comment sys/stat.h
2273@comment POSIX
2274@deftypefn Macro int S_TYPEISSEM (struct stat *@var{s})
2275@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2276If the system implement POSIX semaphores as distinct objects and the
2277file is a semaphore object, this macro returns a non-zero value.
2278In all other cases the result is zero.
2279@end deftypefn
2280
2281@comment sys/stat.h
2282@comment POSIX
2283@deftypefn Macro int S_TYPEISSHM (struct stat *@var{s})
2284@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2285If the system implement POSIX shared memory objects as distinct objects
2286and the file is a shared memory object, this macro returns a non-zero
2287value. In all other cases the result is zero.
2288@end deftypefn
2289
2290@node File Owner
2291@subsection File Owner
2292@cindex file owner
2293@cindex owner of a file
2294@cindex group owner of a file
2295
2296Every file has an @dfn{owner} which is one of the registered user names
2297defined on the system. Each file also has a @dfn{group} which is one of
2298the defined groups. The file owner can often be useful for showing you
2299who edited the file (especially when you edit with GNU Emacs), but its
2300main purpose is for access control.
2301
2302The file owner and group play a role in determining access because the
2303file has one set of access permission bits for the owner, another set
2304that applies to users who belong to the file's group, and a third set of
2305bits that applies to everyone else. @xref{Access Permission}, for the
2306details of how access is decided based on this data.
2307
2308When a file is created, its owner is set to the effective user ID of the
2309process that creates it (@pxref{Process Persona}). The file's group ID
2310may be set to either the effective group ID of the process, or the group
2311ID of the directory that contains the file, depending on the system
2312where the file is stored. When you access a remote file system, it
2313behaves according to its own rules, not according to the system your
2314program is running on. Thus, your program must be prepared to encounter
2315either kind of behavior no matter what kind of system you run it on.
2316
2317@pindex chown
2318@pindex chgrp
2319You can change the owner and/or group owner of an existing file using
2320the @code{chown} function. This is the primitive for the @code{chown}
2321and @code{chgrp} shell commands.
2322
2323@pindex unistd.h
2324The prototype for this function is declared in @file{unistd.h}.
2325
2326@comment unistd.h
2327@comment POSIX.1
2328@deftypefun int chown (const char *@var{filename}, uid_t @var{owner}, gid_t @var{group})
2329@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2330The @code{chown} function changes the owner of the file @var{filename} to
2331@var{owner}, and its group owner to @var{group}.
2332
2333Changing the owner of the file on certain systems clears the set-user-ID
2334and set-group-ID permission bits. (This is because those bits may not
2335be appropriate for the new owner.) Other file permission bits are not
2336changed.
2337
2338The return value is @code{0} on success and @code{-1} on failure.
2339In addition to the usual file name errors (@pxref{File Name Errors}),
2340the following @code{errno} error conditions are defined for this function:
2341
2342@table @code
2343@item EPERM
2344This process lacks permission to make the requested change.
2345
2346Only privileged users or the file's owner can change the file's group.
2347On most file systems, only privileged users can change the file owner;
2348some file systems allow you to change the owner if you are currently the
2349owner. When you access a remote file system, the behavior you encounter
2350is determined by the system that actually holds the file, not by the
2351system your program is running on.
2352
2353@xref{Options for Files}, for information about the
2354@code{_POSIX_CHOWN_RESTRICTED} macro.
2355
2356@item EROFS
2357The file is on a read-only file system.
2358@end table
2359@end deftypefun
2360
2361@comment unistd.h
2362@comment BSD
2363@deftypefun int fchown (int @var{filedes}, uid_t @var{owner}, gid_t @var{group})
2364@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2365This is like @code{chown}, except that it changes the owner of the open
2366file with descriptor @var{filedes}.
2367
2368The return value from @code{fchown} is @code{0} on success and @code{-1}
2369on failure. The following @code{errno} error codes are defined for this
2370function:
2371
2372@table @code
2373@item EBADF
2374The @var{filedes} argument is not a valid file descriptor.
2375
2376@item EINVAL
2377The @var{filedes} argument corresponds to a pipe or socket, not an ordinary
2378file.
2379
2380@item EPERM
2381This process lacks permission to make the requested change. For details
2382see @code{chmod} above.
2383
2384@item EROFS
2385The file resides on a read-only file system.
2386@end table
2387@end deftypefun
2388
2389@node Permission Bits
2390@subsection The Mode Bits for Access Permission
2391
2392The @dfn{file mode}, stored in the @code{st_mode} field of the file
2393attributes, contains two kinds of information: the file type code, and
2394the access permission bits. This section discusses only the access
2395permission bits, which control who can read or write the file.
2396@xref{Testing File Type}, for information about the file type code.
2397
2398All of the symbols listed in this section are defined in the header file
2399@file{sys/stat.h}.
2400@pindex sys/stat.h
2401
2402@cindex file permission bits
2403These symbolic constants are defined for the file mode bits that control
2404access permission for the file:
2405
2406@table @code
2407@comment sys/stat.h
2408@comment POSIX.1
2409@item S_IRUSR
2410@vindex S_IRUSR
2411@comment sys/stat.h
2412@comment BSD
2413@itemx S_IREAD
2414@vindex S_IREAD
2415Read permission bit for the owner of the file. On many systems this bit
2416is 0400. @code{S_IREAD} is an obsolete synonym provided for BSD
2417compatibility.
2418
2419@comment sys/stat.h
2420@comment POSIX.1
2421@item S_IWUSR
2422@vindex S_IWUSR
2423@comment sys/stat.h
2424@comment BSD
2425@itemx S_IWRITE
2426@vindex S_IWRITE
2427Write permission bit for the owner of the file. Usually 0200.
2428@w{@code{S_IWRITE}} is an obsolete synonym provided for BSD compatibility.
2429
2430@comment sys/stat.h
2431@comment POSIX.1
2432@item S_IXUSR
2433@vindex S_IXUSR
2434@comment sys/stat.h
2435@comment BSD
2436@itemx S_IEXEC
2437@vindex S_IEXEC
2438Execute (for ordinary files) or search (for directories) permission bit
2439for the owner of the file. Usually 0100. @code{S_IEXEC} is an obsolete
2440synonym provided for BSD compatibility.
2441
2442@comment sys/stat.h
2443@comment POSIX.1
2444@item S_IRWXU
2445@vindex S_IRWXU
2446This is equivalent to @samp{(S_IRUSR | S_IWUSR | S_IXUSR)}.
2447
2448@comment sys/stat.h
2449@comment POSIX.1
2450@item S_IRGRP
2451@vindex S_IRGRP
2452Read permission bit for the group owner of the file. Usually 040.
2453
2454@comment sys/stat.h
2455@comment POSIX.1
2456@item S_IWGRP
2457@vindex S_IWGRP
2458Write permission bit for the group owner of the file. Usually 020.
2459
2460@comment sys/stat.h
2461@comment POSIX.1
2462@item S_IXGRP
2463@vindex S_IXGRP
2464Execute or search permission bit for the group owner of the file.
2465Usually 010.
2466
2467@comment sys/stat.h
2468@comment POSIX.1
2469@item S_IRWXG
2470@vindex S_IRWXG
2471This is equivalent to @samp{(S_IRGRP | S_IWGRP | S_IXGRP)}.
2472
2473@comment sys/stat.h
2474@comment POSIX.1
2475@item S_IROTH
2476@vindex S_IROTH
2477Read permission bit for other users. Usually 04.
2478
2479@comment sys/stat.h
2480@comment POSIX.1
2481@item S_IWOTH
2482@vindex S_IWOTH
2483Write permission bit for other users. Usually 02.
2484
2485@comment sys/stat.h
2486@comment POSIX.1
2487@item S_IXOTH
2488@vindex S_IXOTH
2489Execute or search permission bit for other users. Usually 01.
2490
2491@comment sys/stat.h
2492@comment POSIX.1
2493@item S_IRWXO
2494@vindex S_IRWXO
2495This is equivalent to @samp{(S_IROTH | S_IWOTH | S_IXOTH)}.
2496
2497@comment sys/stat.h
2498@comment POSIX
2499@item S_ISUID
2500@vindex S_ISUID
2501This is the set-user-ID on execute bit, usually 04000.
2502@xref{How Change Persona}.
2503
2504@comment sys/stat.h
2505@comment POSIX
2506@item S_ISGID
2507@vindex S_ISGID
2508This is the set-group-ID on execute bit, usually 02000.
2509@xref{How Change Persona}.
2510
2511@cindex sticky bit
2512@comment sys/stat.h
2513@comment BSD
2514@item S_ISVTX
2515@vindex S_ISVTX
2516This is the @dfn{sticky} bit, usually 01000.
2517
2518For a directory it gives permission to delete a file in that directory
2519only if you own that file. Ordinarily, a user can either delete all the
2520files in a directory or cannot delete any of them (based on whether the
2521user has write permission for the directory). The same restriction
2522applies---you must have both write permission for the directory and own
2523the file you want to delete. The one exception is that the owner of the
2524directory can delete any file in the directory, no matter who owns it
2525(provided the owner has given himself write permission for the
2526directory). This is commonly used for the @file{/tmp} directory, where
2527anyone may create files but not delete files created by other users.
2528
2529Originally the sticky bit on an executable file modified the swapping
2530policies of the system. Normally, when a program terminated, its pages
2531in core were immediately freed and reused. If the sticky bit was set on
2532the executable file, the system kept the pages in core for a while as if
2533the program were still running. This was advantageous for a program
2534likely to be run many times in succession. This usage is obsolete in
2535modern systems. When a program terminates, its pages always remain in
2536core as long as there is no shortage of memory in the system. When the
2537program is next run, its pages will still be in core if no shortage
2538arose since the last run.
2539
2540On some modern systems where the sticky bit has no useful meaning for an
2541executable file, you cannot set the bit at all for a non-directory.
2542If you try, @code{chmod} fails with @code{EFTYPE};
2543@pxref{Setting Permissions}.
2544
2545Some systems (particularly SunOS) have yet another use for the sticky
2546bit. If the sticky bit is set on a file that is @emph{not} executable,
2547it means the opposite: never cache the pages of this file at all. The
2548main use of this is for the files on an NFS server machine which are
2549used as the swap area of diskless client machines. The idea is that the
2550pages of the file will be cached in the client's memory, so it is a
2551waste of the server's memory to cache them a second time. With this
2552usage the sticky bit also implies that the filesystem may fail to record
2553the file's modification time onto disk reliably (the idea being that
2554no-one cares for a swap file).
2555
2556This bit is only available on BSD systems (and those derived from
2557them). Therefore one has to use the @code{_GNU_SOURCE} feature select
2558macro, or not define any feature test macros, to get the definition
2559(@pxref{Feature Test Macros}).
2560@end table
2561
2562The actual bit values of the symbols are listed in the table above
2563so you can decode file mode values when debugging your programs.
2564These bit values are correct for most systems, but they are not
2565guaranteed.
2566
2567@strong{Warning:} Writing explicit numbers for file permissions is bad
2568practice. Not only is it not portable, it also requires everyone who
2569reads your program to remember what the bits mean. To make your program
2570clean use the symbolic names.
2571
2572@node Access Permission
2573@subsection How Your Access to a File is Decided
2574@cindex permission to access a file
2575@cindex access permission for a file
2576@cindex file access permission
2577
2578Recall that the operating system normally decides access permission for
2579a file based on the effective user and group IDs of the process and its
2580supplementary group IDs, together with the file's owner, group and
2581permission bits. These concepts are discussed in detail in @ref{Process
2582Persona}.
2583
2584If the effective user ID of the process matches the owner user ID of the
2585file, then permissions for read, write, and execute/search are
2586controlled by the corresponding ``user'' (or ``owner'') bits. Likewise,
2587if any of the effective group ID or supplementary group IDs of the
2588process matches the group owner ID of the file, then permissions are
2589controlled by the ``group'' bits. Otherwise, permissions are controlled
2590by the ``other'' bits.
2591
2592Privileged users, like @samp{root}, can access any file regardless of
2593its permission bits. As a special case, for a file to be executable
2594even by a privileged user, at least one of its execute bits must be set.
2595
2596@node Setting Permissions
2597@subsection Assigning File Permissions
2598
2599@cindex file creation mask
2600@cindex umask
2601The primitive functions for creating files (for example, @code{open} or
2602@code{mkdir}) take a @var{mode} argument, which specifies the file
2603permissions to give the newly created file. This mode is modified by
2604the process's @dfn{file creation mask}, or @dfn{umask}, before it is
2605used.
2606
2607The bits that are set in the file creation mask identify permissions
2608that are always to be disabled for newly created files. For example, if
2609you set all the ``other'' access bits in the mask, then newly created
2610files are not accessible at all to processes in the ``other'' category,
2611even if the @var{mode} argument passed to the create function would
2612permit such access. In other words, the file creation mask is the
2613complement of the ordinary access permissions you want to grant.
2614
2615Programs that create files typically specify a @var{mode} argument that
2616includes all the permissions that make sense for the particular file.
2617For an ordinary file, this is typically read and write permission for
2618all classes of users. These permissions are then restricted as
2619specified by the individual user's own file creation mask.
2620
2621@findex chmod
2622To change the permission of an existing file given its name, call
2623@code{chmod}. This function uses the specified permission bits and
2624ignores the file creation mask.
2625
2626@pindex umask
2627In normal use, the file creation mask is initialized by the user's login
2628shell (using the @code{umask} shell command), and inherited by all
2629subprocesses. Application programs normally don't need to worry about
2630the file creation mask. It will automatically do what it is supposed to
2631do.
2632
2633When your program needs to create a file and bypass the umask for its
2634access permissions, the easiest way to do this is to use @code{fchmod}
2635after opening the file, rather than changing the umask. In fact,
2636changing the umask is usually done only by shells. They use the
2637@code{umask} function.
2638
2639The functions in this section are declared in @file{sys/stat.h}.
2640@pindex sys/stat.h
2641
2642@comment sys/stat.h
2643@comment POSIX.1
2644@deftypefun mode_t umask (mode_t @var{mask})
2645@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2646The @code{umask} function sets the file creation mask of the current
2647process to @var{mask}, and returns the previous value of the file
2648creation mask.
2649
2650Here is an example showing how to read the mask with @code{umask}
2651without changing it permanently:
2652
2653@smallexample
2654mode_t
2655read_umask (void)
2656@{
2657 mode_t mask = umask (0);
2658 umask (mask);
2659 return mask;
2660@}
2661@end smallexample
2662
2663@noindent
2664However, on @gnuhurdsystems{} it is better to use @code{getumask} if
2665you just want to read the mask value, because it is reentrant.
2666@end deftypefun
2667
2668@comment sys/stat.h
2669@comment GNU
2670@deftypefun mode_t getumask (void)
2671@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2672Return the current value of the file creation mask for the current
2673process. This function is a GNU extension and is only available on
2674@gnuhurdsystems{}.
2675@end deftypefun
2676
2677@comment sys/stat.h
2678@comment POSIX.1
2679@deftypefun int chmod (const char *@var{filename}, mode_t @var{mode})
2680@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2681The @code{chmod} function sets the access permission bits for the file
2682named by @var{filename} to @var{mode}.
2683
2684If @var{filename} is a symbolic link, @code{chmod} changes the
2685permissions of the file pointed to by the link, not those of the link
2686itself.
2687
2688This function returns @code{0} if successful and @code{-1} if not. In
2689addition to the usual file name errors (@pxref{File Name
2690Errors}), the following @code{errno} error conditions are defined for
2691this function:
2692
2693@table @code
2694@item ENOENT
2695The named file doesn't exist.
2696
2697@item EPERM
2698This process does not have permission to change the access permissions
2699of this file. Only the file's owner (as judged by the effective user ID
2700of the process) or a privileged user can change them.
2701
2702@item EROFS
2703The file resides on a read-only file system.
2704
2705@item EFTYPE
2706@var{mode} has the @code{S_ISVTX} bit (the ``sticky bit'') set,
2707and the named file is not a directory. Some systems do not allow setting the
2708sticky bit on non-directory files, and some do (and only some of those
2709assign a useful meaning to the bit for non-directory files).
2710
2711You only get @code{EFTYPE} on systems where the sticky bit has no useful
2712meaning for non-directory files, so it is always safe to just clear the
2713bit in @var{mode} and call @code{chmod} again. @xref{Permission Bits},
2714for full details on the sticky bit.
2715@end table
2716@end deftypefun
2717
2718@comment sys/stat.h
2719@comment BSD
2720@deftypefun int fchmod (int @var{filedes}, mode_t @var{mode})
2721@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2722This is like @code{chmod}, except that it changes the permissions of the
2723currently open file given by @var{filedes}.
2724
2725The return value from @code{fchmod} is @code{0} on success and @code{-1}
2726on failure. The following @code{errno} error codes are defined for this
2727function:
2728
2729@table @code
2730@item EBADF
2731The @var{filedes} argument is not a valid file descriptor.
2732
2733@item EINVAL
2734The @var{filedes} argument corresponds to a pipe or socket, or something
2735else that doesn't really have access permissions.
2736
2737@item EPERM
2738This process does not have permission to change the access permissions
2739of this file. Only the file's owner (as judged by the effective user ID
2740of the process) or a privileged user can change them.
2741
2742@item EROFS
2743The file resides on a read-only file system.
2744@end table
2745@end deftypefun
2746
2747@node Testing File Access
2748@subsection Testing Permission to Access a File
2749@cindex testing access permission
2750@cindex access, testing for
2751@cindex setuid programs and file access
2752
2753In some situations it is desirable to allow programs to access files or
2754devices even if this is not possible with the permissions granted to the
2755user. One possible solution is to set the setuid-bit of the program
2756file. If such a program is started the @emph{effective} user ID of the
2757process is changed to that of the owner of the program file. So to
2758allow write access to files like @file{/etc/passwd}, which normally can
2759be written only by the super-user, the modifying program will have to be
2760owned by @code{root} and the setuid-bit must be set.
2761
2762But beside the files the program is intended to change the user should
2763not be allowed to access any file to which s/he would not have access
2764anyway. The program therefore must explicitly check whether @emph{the
2765user} would have the necessary access to a file, before it reads or
2766writes the file.
2767
2768To do this, use the function @code{access}, which checks for access
2769permission based on the process's @emph{real} user ID rather than the
2770effective user ID. (The setuid feature does not alter the real user ID,
2771so it reflects the user who actually ran the program.)
2772
2773There is another way you could check this access, which is easy to
2774describe, but very hard to use. This is to examine the file mode bits
2775and mimic the system's own access computation. This method is
2776undesirable because many systems have additional access control
2777features; your program cannot portably mimic them, and you would not
2778want to try to keep track of the diverse features that different systems
2779have. Using @code{access} is simple and automatically does whatever is
2780appropriate for the system you are using.
2781
2782@code{access} is @emph{only} only appropriate to use in setuid programs.
2783A non-setuid program will always use the effective ID rather than the
2784real ID.
2785
2786@pindex unistd.h
2787The symbols in this section are declared in @file{unistd.h}.
2788
2789@comment unistd.h
2790@comment POSIX.1
2791@deftypefun int access (const char *@var{filename}, int @var{how})
2792@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2793The @code{access} function checks to see whether the file named by
2794@var{filename} can be accessed in the way specified by the @var{how}
2795argument. The @var{how} argument either can be the bitwise OR of the
2796flags @code{R_OK}, @code{W_OK}, @code{X_OK}, or the existence test
2797@code{F_OK}.
2798
2799This function uses the @emph{real} user and group IDs of the calling
2800process, rather than the @emph{effective} IDs, to check for access
2801permission. As a result, if you use the function from a @code{setuid}
2802or @code{setgid} program (@pxref{How Change Persona}), it gives
2803information relative to the user who actually ran the program.
2804
2805The return value is @code{0} if the access is permitted, and @code{-1}
2806otherwise. (In other words, treated as a predicate function,
2807@code{access} returns true if the requested access is @emph{denied}.)
2808
2809In addition to the usual file name errors (@pxref{File Name
2810Errors}), the following @code{errno} error conditions are defined for
2811this function:
2812
2813@table @code
2814@item EACCES
2815The access specified by @var{how} is denied.
2816
2817@item ENOENT
2818The file doesn't exist.
2819
2820@item EROFS
2821Write permission was requested for a file on a read-only file system.
2822@end table
2823@end deftypefun
2824
2825These macros are defined in the header file @file{unistd.h} for use
2826as the @var{how} argument to the @code{access} function. The values
2827are integer constants.
2828@pindex unistd.h
2829
2830@comment unistd.h
2831@comment POSIX.1
2832@deftypevr Macro int R_OK
2833Flag meaning test for read permission.
2834@end deftypevr
2835
2836@comment unistd.h
2837@comment POSIX.1
2838@deftypevr Macro int W_OK
2839Flag meaning test for write permission.
2840@end deftypevr
2841
2842@comment unistd.h
2843@comment POSIX.1
2844@deftypevr Macro int X_OK
2845Flag meaning test for execute/search permission.
2846@end deftypevr
2847
2848@comment unistd.h
2849@comment POSIX.1
2850@deftypevr Macro int F_OK
2851Flag meaning test for existence of the file.
2852@end deftypevr
2853
2854@node File Times
2855@subsection File Times
2856
2857@cindex file access time
2858@cindex file modification time
2859@cindex file attribute modification time
2860Each file has three time stamps associated with it: its access time,
2861its modification time, and its attribute modification time. These
2862correspond to the @code{st_atime}, @code{st_mtime}, and @code{st_ctime}
2863members of the @code{stat} structure; see @ref{File Attributes}.
2864
2865All of these times are represented in calendar time format, as
2866@code{time_t} objects. This data type is defined in @file{time.h}.
2867For more information about representation and manipulation of time
2868values, see @ref{Calendar Time}.
2869@pindex time.h
2870
2871Reading from a file updates its access time attribute, and writing
2872updates its modification time. When a file is created, all three
2873time stamps for that file are set to the current time. In addition, the
2874attribute change time and modification time fields of the directory that
2875contains the new entry are updated.
2876
2877Adding a new name for a file with the @code{link} function updates the
2878attribute change time field of the file being linked, and both the
2879attribute change time and modification time fields of the directory
2880containing the new name. These same fields are affected if a file name
2881is deleted with @code{unlink}, @code{remove} or @code{rmdir}. Renaming
2882a file with @code{rename} affects only the attribute change time and
2883modification time fields of the two parent directories involved, and not
2884the times for the file being renamed.
2885
2886Changing the attributes of a file (for example, with @code{chmod})
2887updates its attribute change time field.
2888
2889You can also change some of the time stamps of a file explicitly using
2890the @code{utime} function---all except the attribute change time. You
2891need to include the header file @file{utime.h} to use this facility.
2892@pindex utime.h
2893
2894@comment utime.h
2895@comment POSIX.1
2896@deftp {Data Type} {struct utimbuf}
2897The @code{utimbuf} structure is used with the @code{utime} function to
2898specify new access and modification times for a file. It contains the
2899following members:
2900
2901@table @code
2902@item time_t actime
2903This is the access time for the file.
2904
2905@item time_t modtime
2906This is the modification time for the file.
2907@end table
2908@end deftp
2909
2910@comment utime.h
2911@comment POSIX.1
2912@deftypefun int utime (const char *@var{filename}, const struct utimbuf *@var{times})
2913@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2914@c In the absence of a utime syscall, it non-atomically converts times
2915@c to a struct timeval and calls utimes.
2916This function is used to modify the file times associated with the file
2917named @var{filename}.
2918
2919If @var{times} is a null pointer, then the access and modification times
2920of the file are set to the current time. Otherwise, they are set to the
2921values from the @code{actime} and @code{modtime} members (respectively)
2922of the @code{utimbuf} structure pointed to by @var{times}.
2923
2924The attribute modification time for the file is set to the current time
2925in either case (since changing the time stamps is itself a modification
2926of the file attributes).
2927
2928The @code{utime} function returns @code{0} if successful and @code{-1}
2929on failure. In addition to the usual file name errors
2930(@pxref{File Name Errors}), the following @code{errno} error conditions
2931are defined for this function:
2932
2933@table @code
2934@item EACCES
2935There is a permission problem in the case where a null pointer was
2936passed as the @var{times} argument. In order to update the time stamp on
2937the file, you must either be the owner of the file, have write
2938permission for the file, or be a privileged user.
2939
2940@item ENOENT
2941The file doesn't exist.
2942
2943@item EPERM
2944If the @var{times} argument is not a null pointer, you must either be
2945the owner of the file or be a privileged user.
2946
2947@item EROFS
2948The file lives on a read-only file system.
2949@end table
2950@end deftypefun
2951
2952Each of the three time stamps has a corresponding microsecond part,
2953which extends its resolution. These fields are called
2954@code{st_atime_usec}, @code{st_mtime_usec}, and @code{st_ctime_usec};
2955each has a value between 0 and 999,999, which indicates the time in
2956microseconds. They correspond to the @code{tv_usec} field of a
2957@code{timeval} structure; see @ref{High-Resolution Calendar}.
2958
2959The @code{utimes} function is like @code{utime}, but also lets you specify
2960the fractional part of the file times. The prototype for this function is
2961in the header file @file{sys/time.h}.
2962@pindex sys/time.h
2963
2964@comment sys/time.h
2965@comment BSD
2966@deftypefun int utimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]})
2967@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2968@c In the absence of a utimes syscall, it non-atomically converts tvp
2969@c to struct timespec array and issues a utimensat syscall, or to
2970@c struct utimbuf and calls utime.
2971This function sets the file access and modification times of the file
2972@var{filename}. The new file access time is specified by
2973@code{@var{tvp}[0]}, and the new modification time by
2974@code{@var{tvp}[1]}. Similar to @code{utime}, if @var{tvp} is a null
2975pointer then the access and modification times of the file are set to
2976the current time. This function comes from BSD.
2977
2978The return values and error conditions are the same as for the @code{utime}
2979function.
2980@end deftypefun
2981
2982@comment sys/time.h
2983@comment BSD
2984@deftypefun int lutimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]})
2985@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2986@c Since there's no lutimes syscall, it non-atomically converts tvp
2987@c to struct timespec array and issues a utimensat syscall.
2988This function is like @code{utimes}, except that it does not follow
2989symbolic links. If @var{filename} is the name of a symbolic link,
2990@code{lutimes} sets the file access and modification times of the
2991symbolic link special file itself (as seen by @code{lstat};
2992@pxref{Symbolic Links}) while @code{utimes} sets the file access and
2993modification times of the file the symbolic link refers to. This
2994function comes from FreeBSD, and is not available on all platforms (if
2995not available, it will fail with @code{ENOSYS}).
2996
2997The return values and error conditions are the same as for the @code{utime}
2998function.
2999@end deftypefun
3000
3001@comment sys/time.h
3002@comment BSD
3003@deftypefun int futimes (int @var{fd}, const struct timeval @var{tvp}@t{[2]})
3004@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3005@c Since there's no futimes syscall, it non-atomically converts tvp
3006@c to struct timespec array and issues a utimensat syscall, falling back
3007@c to utimes on a /proc/self/fd symlink.
3008This function is like @code{utimes}, except that it takes an open file
3009descriptor as an argument instead of a file name. @xref{Low-Level
3010I/O}. This function comes from FreeBSD, and is not available on all
3011platforms (if not available, it will fail with @code{ENOSYS}).
3012
3013Like @code{utimes}, @code{futimes} returns @code{0} on success and @code{-1}
3014on failure. The following @code{errno} error conditions are defined for
3015@code{futimes}:
3016
3017@table @code
3018@item EACCES
3019There is a permission problem in the case where a null pointer was
3020passed as the @var{times} argument. In order to update the time stamp on
3021the file, you must either be the owner of the file, have write
3022permission for the file, or be a privileged user.
3023
3024@item EBADF
3025The @var{filedes} argument is not a valid file descriptor.
3026
3027@item EPERM
3028If the @var{times} argument is not a null pointer, you must either be
3029the owner of the file or be a privileged user.
3030
3031@item EROFS
3032The file lives on a read-only file system.
3033@end table
3034@end deftypefun
3035
3036@node File Size
3037@subsection File Size
3038
3039Normally file sizes are maintained automatically. A file begins with a
3040size of @math{0} and is automatically extended when data is written past
3041its end. It is also possible to empty a file completely by an
3042@code{open} or @code{fopen} call.
3043
3044However, sometimes it is necessary to @emph{reduce} the size of a file.
3045This can be done with the @code{truncate} and @code{ftruncate} functions.
3046They were introduced in BSD Unix. @code{ftruncate} was later added to
3047POSIX.1.
3048
3049Some systems allow you to extend a file (creating holes) with these
3050functions. This is useful when using memory-mapped I/O
3051(@pxref{Memory-mapped I/O}), where files are not automatically extended.
3052However, it is not portable but must be implemented if @code{mmap}
3053allows mapping of files (i.e., @code{_POSIX_MAPPED_FILES} is defined).
3054
3055Using these functions on anything other than a regular file gives
3056@emph{undefined} results. On many systems, such a call will appear to
3057succeed, without actually accomplishing anything.
3058
3059@comment unistd.h
3060@comment X/Open
3061@deftypefun int truncate (const char *@var{filename}, off_t @var{length})
3062@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3063@c In the absence of a truncate syscall, we use open and ftruncate.
3064
3065The @code{truncate} function changes the size of @var{filename} to
3066@var{length}. If @var{length} is shorter than the previous length, data
3067at the end will be lost. The file must be writable by the user to
3068perform this operation.
3069
3070If @var{length} is longer, holes will be added to the end. However, some
3071systems do not support this feature and will leave the file unchanged.
3072
3073When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the
3074@code{truncate} function is in fact @code{truncate64} and the type
3075@code{off_t} has 64 bits which makes it possible to handle files up to
3076@twoexp{63} bytes in length.
3077
3078The return value is @math{0} for success, or @math{-1} for an error. In
3079addition to the usual file name errors, the following errors may occur:
3080
3081@table @code
3082
3083@item EACCES
3084The file is a directory or not writable.
3085
3086@item EINVAL
3087@var{length} is negative.
3088
3089@item EFBIG
3090The operation would extend the file beyond the limits of the operating system.
3091
3092@item EIO
3093A hardware I/O error occurred.
3094
3095@item EPERM
3096The file is "append-only" or "immutable".
3097
3098@item EINTR
3099The operation was interrupted by a signal.
3100
3101@end table
3102
3103@end deftypefun
3104
3105@comment unistd.h
3106@comment Unix98
3107@deftypefun int truncate64 (const char *@var{name}, off64_t @var{length})
3108@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3109@c In the absence of a syscall, try truncate if length fits.
3110This function is similar to the @code{truncate} function. The
3111difference is that the @var{length} argument is 64 bits wide even on 32
3112bits machines, which allows the handling of files with sizes up to
3113@twoexp{63} bytes.
3114
3115When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} on a
311632 bits machine this function is actually available under the name
3117@code{truncate} and so transparently replaces the 32 bits interface.
3118@end deftypefun
3119
3120@comment unistd.h
3121@comment POSIX
3122@deftypefun int ftruncate (int @var{fd}, off_t @var{length})
3123@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3124
3125This is like @code{truncate}, but it works on a file descriptor @var{fd}
3126for an opened file instead of a file name to identify the object. The
3127file must be opened for writing to successfully carry out the operation.
3128
3129The POSIX standard leaves it implementation defined what happens if the
3130specified new @var{length} of the file is bigger than the original size.
3131The @code{ftruncate} function might simply leave the file alone and do
3132nothing or it can increase the size to the desired size. In this later
3133case the extended area should be zero-filled. So using @code{ftruncate}
3134is no reliable way to increase the file size but if it is possible it is
3135probably the fastest way. The function also operates on POSIX shared
3136memory segments if these are implemented by the system.
3137
3138@code{ftruncate} is especially useful in combination with @code{mmap}.
3139Since the mapped region must have a fixed size one cannot enlarge the
3140file by writing something beyond the last mapped page. Instead one has
3141to enlarge the file itself and then remap the file with the new size.
3142The example below shows how this works.
3143
3144When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the
3145@code{ftruncate} function is in fact @code{ftruncate64} and the type
3146@code{off_t} has 64 bits which makes it possible to handle files up to
3147@twoexp{63} bytes in length.
3148
3149The return value is @math{0} for success, or @math{-1} for an error. The
3150following errors may occur:
3151
3152@table @code
3153
3154@item EBADF
3155@var{fd} does not correspond to an open file.
3156
3157@item EACCES
3158@var{fd} is a directory or not open for writing.
3159
3160@item EINVAL
3161@var{length} is negative.
3162
3163@item EFBIG
3164The operation would extend the file beyond the limits of the operating system.
3165@c or the open() call -- with the not-yet-discussed feature of opening
3166@c files with extra-large offsets.
3167
3168@item EIO
3169A hardware I/O error occurred.
3170
3171@item EPERM
3172The file is "append-only" or "immutable".
3173
3174@item EINTR
3175The operation was interrupted by a signal.
3176
3177@c ENOENT is also possible on Linux --- however it only occurs if the file
3178@c descriptor has a `file' structure but no `inode' structure. I'm not
3179@c sure how such an fd could be created. Perhaps it's a bug.
3180
3181@end table
3182
3183@end deftypefun
3184
3185@comment unistd.h
3186@comment Unix98
3187@deftypefun int ftruncate64 (int @var{id}, off64_t @var{length})
3188@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3189@c In the absence of a syscall, try ftruncate if length fits.
3190This function is similar to the @code{ftruncate} function. The
3191difference is that the @var{length} argument is 64 bits wide even on 32
3192bits machines which allows the handling of files with sizes up to
3193@twoexp{63} bytes.
3194
3195When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} on a
319632 bits machine this function is actually available under the name
3197@code{ftruncate} and so transparently replaces the 32 bits interface.
3198@end deftypefun
3199
3200As announced here is a little example of how to use @code{ftruncate} in
3201combination with @code{mmap}:
3202
3203@smallexample
3204int fd;
3205void *start;
3206size_t len;
3207
3208int
3209add (off_t at, void *block, size_t size)
3210@{
3211 if (at + size > len)
3212 @{
3213 /* Resize the file and remap. */
3214 size_t ps = sysconf (_SC_PAGESIZE);
3215 size_t ns = (at + size + ps - 1) & ~(ps - 1);
3216 void *np;
3217 if (ftruncate (fd, ns) < 0)
3218 return -1;
3219 np = mmap (NULL, ns, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
3220 if (np == MAP_FAILED)
3221 return -1;
3222 start = np;
3223 len = ns;
3224 @}
3225 memcpy ((char *) start + at, block, size);
3226 return 0;
3227@}
3228@end smallexample
3229
3230The function @code{add} writes a block of memory at an arbitrary
3231position in the file. If the current size of the file is too small it
3232is extended. Note the it is extended by a round number of pages. This
3233is a requirement of @code{mmap}. The program has to keep track of the
3234real size, and when it has finished a final @code{ftruncate} call should
3235set the real size of the file.
3236
3237@node Storage Allocation
3238@subsection Storage Allocation
3239@cindex allocating file storage
3240@cindex file allocation
3241@cindex storage allocating
3242
3243@cindex file fragmentation
3244@cindex fragmentation of files
3245@cindex sparse files
3246@cindex files, sparse
3247Most file systems support allocating large files in a non-contiguous
3248fashion: the file is split into @emph{fragments} which are allocated
3249sequentially, but the fragments themselves can be scattered across the
3250disk. File systems generally try to avoid such fragmentation because it
3251decreases performance, but if a file gradually increases in size, there
3252might be no other option than to fragment it. In addition, many file
3253systems support @emph{sparse files} with @emph{holes}: regions of null
3254bytes for which no backing storage has been allocated by the file
3255system. When the holes are finally overwritten with data, fragmentation
3256can occur as well.
3257
3258Explicit allocation of storage for yet-unwritten parts of the file can
3259help the system to avoid fragmentation. Additionally, if storage
3260pre-allocation fails, it is possible to report the out-of-disk error
3261early, often without filling up the entire disk. However, due to
3262deduplication, copy-on-write semantics, and file compression, such
3263pre-allocation may not reliably prevent the out-of-disk-space error from
3264occurring later. Checking for write errors is still required, and
3265writes to memory-mapped regions created with @code{mmap} can still
3266result in @code{SIGBUS}.
3267
3268@deftypefun int posix_fallocate (int @var{fd}, off_t @var{offset}, off_t @var{length})
3269@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3270@c If the file system does not support allocation,
3271@c @code{posix_fallocate} has a race with file extension (if
3272@c @var{length} is zero) or with concurrent writes of non-NUL bytes (if
3273@c @var{length} is positive).
3274
3275Allocate backing store for the region of @var{length} bytes starting at
3276byte @var{offset} in the file for the descriptor @var{fd}. The file
3277length is increased to @samp{@var{length} + @var{offset}} if necessary.
3278
3279@var{fd} must be a regular file opened for writing, or @code{EBADF} is
3280returned. If there is insufficient disk space to fulfill the allocation
3281request, @code{ENOSPC} is returned.
3282
3283@strong{Note:} If @code{fallocate} is not available (because the file
3284system does not support it), @code{posix_fallocate} is emulated, which
3285has the following drawbacks:
3286
3287@itemize @bullet
3288@item
3289It is very inefficient because all file system blocks in the requested
3290range need to be examined (even if they have been allocated before) and
3291potentially rewritten. In contrast, with proper @code{fallocate}
3292support (see below), the file system can examine the internal file
3293allocation data structures and eliminate holes directly, maybe even
3294using unwritten extents (which are pre-allocated but uninitialized on
3295disk).
3296
3297@item
3298There is a race condition if another thread or process modifies the
3299underlying file in the to-be-allocated area. Non-null bytes could be
3300overwritten with null bytes.
3301
3302@item
3303If @var{fd} has been opened with the @code{O_WRONLY} flag, the function
3304will fail with an @code{errno} value of @code{EBADF}.
3305
3306@item
3307If @var{fd} has been opened with the @code{O_APPEND} flag, the function
3308will fail with an @code{errno} value of @code{EBADF}.
3309
3310@item
3311If @var{length} is zero, @code{ftruncate} is used to increase the file
3312size as requested, without allocating file system blocks. There is a
3313race condition which means that @code{ftruncate} can accidentally
3314truncate the file if it has been extended concurrently.
3315@end itemize
3316
3317On Linux, if an application does not benefit from emulation or if the
3318emulation is harmful due to its inherent race conditions, the
3319application can use the Linux-specific @code{fallocate} function, with a
3320zero flag argument. For the @code{fallocate} function, @theglibc{} does
3321not perform allocation emulation if the file system does not support
3322allocation. Instead, an @code{EOPNOTSUPP} is returned to the caller.
3323
3324@end deftypefun
3325
3326@deftypefun int posix_fallocate64 (int @var{fd}, off64_t @var{offset}, off64_t @var{length})
3327@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3328
3329This function is a variant of @code{posix_fallocate64} which accepts
333064-bit file offsets on all platforms.
3331
3332@end deftypefun
3333
3334@node Making Special Files
3335@section Making Special Files
3336@cindex creating special files
3337@cindex special files
3338
3339The @code{mknod} function is the primitive for making special files,
3340such as files that correspond to devices. @Theglibc{} includes
3341this function for compatibility with BSD.
3342
3343The prototype for @code{mknod} is declared in @file{sys/stat.h}.
3344@pindex sys/stat.h
3345
3346@comment sys/stat.h
3347@comment BSD
3348@deftypefun int mknod (const char *@var{filename}, mode_t @var{mode}, dev_t @var{dev})
3349@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3350@c Instead of issuing the syscall directly, we go through xmknod.
3351@c Although the internal xmknod takes a dev_t*, that could lead to
3352@c @mtsrace races, it's passed a pointer to mknod's dev.
3353The @code{mknod} function makes a special file with name @var{filename}.
3354The @var{mode} specifies the mode of the file, and may include the various
3355special file bits, such as @code{S_IFCHR} (for a character special file)
3356or @code{S_IFBLK} (for a block special file). @xref{Testing File Type}.
3357
3358The @var{dev} argument specifies which device the special file refers to.
3359Its exact interpretation depends on the kind of special file being created.
3360
3361The return value is @code{0} on success and @code{-1} on error. In addition
3362to the usual file name errors (@pxref{File Name Errors}), the
3363following @code{errno} error conditions are defined for this function:
3364
3365@table @code
3366@item EPERM
3367The calling process is not privileged. Only the superuser can create
3368special files.
3369
3370@item ENOSPC
3371The directory or file system that would contain the new file is full
3372and cannot be extended.
3373
3374@item EROFS
3375The directory containing the new file can't be modified because it's on
3376a read-only file system.
3377
3378@item EEXIST
3379There is already a file named @var{filename}. If you want to replace
3380this file, you must remove the old file explicitly first.
3381@end table
3382@end deftypefun
3383
3384@node Temporary Files
3385@section Temporary Files
3386
3387If you need to use a temporary file in your program, you can use the
3388@code{tmpfile} function to open it. Or you can use the @code{tmpnam}
3389(better: @code{tmpnam_r}) function to provide a name for a temporary
3390file and then you can open it in the usual way with @code{fopen}.
3391
3392The @code{tempnam} function is like @code{tmpnam} but lets you choose
3393what directory temporary files will go in, and something about what
3394their file names will look like. Important for multi-threaded programs
3395is that @code{tempnam} is reentrant, while @code{tmpnam} is not since it
3396returns a pointer to a static buffer.
3397
3398These facilities are declared in the header file @file{stdio.h}.
3399@pindex stdio.h
3400
3401@comment stdio.h
3402@comment ISO
3403@deftypefun {FILE *} tmpfile (void)
3404@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
3405@c The unsafety issues are those of fdopen, plus @acsfd because of the
3406@c open.
3407@c __path_search (internal buf, !dir, const pfx, !try_tmpdir) ok
3408@c libc_secure_genenv only if try_tmpdir
3409@c xstat64, strlen, strcmp, sprintf
3410@c __gen_tempname (internal tmpl, __GT_FILE) ok
3411@c strlen, memcmp, getpid, open/mkdir/lxstat64 ok
3412@c HP_TIMING_NOW if available ok
3413@c gettimeofday (!tz) first time, or every time if no HP_TIMING_NOW ok
3414@c static value is used and modified without synchronization ok
3415@c but the use is as a source of non-cryptographic randomness
3416@c with retries in case of collision, so it should be safe
3417@c unlink, fdopen
3418This function creates a temporary binary file for update mode, as if by
3419calling @code{fopen} with mode @code{"wb+"}. The file is deleted
3420automatically when it is closed or when the program terminates. (On
3421some other @w{ISO C} systems the file may fail to be deleted if the program
3422terminates abnormally).
3423
3424This function is reentrant.
3425
3426When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
342732-bit system this function is in fact @code{tmpfile64}, i.e., the LFS
3428interface transparently replaces the old interface.
3429@end deftypefun
3430
3431@comment stdio.h
3432@comment Unix98
3433@deftypefun {FILE *} tmpfile64 (void)
3434@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
3435This function is similar to @code{tmpfile}, but the stream it returns a
3436pointer to was opened using @code{tmpfile64}. Therefore this stream can
3437be used for files larger than @twoexp{31} bytes on 32-bit machines.
3438
3439Please note that the return type is still @code{FILE *}. There is no
3440special @code{FILE} type for the LFS interface.
3441
3442If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
3443bits machine this function is available under the name @code{tmpfile}
3444and so transparently replaces the old interface.
3445@end deftypefun
3446
3447@comment stdio.h
3448@comment ISO
3449@deftypefun {char *} tmpnam (char *@var{result})
3450@safety{@prelim{}@mtunsafe{@mtasurace{:tmpnam/!result}}@asunsafe{}@acsafe{}}
3451@c The passed-in buffer should not be modified concurrently with the
3452@c call.
3453@c __path_search (static or passed-in buf, !dir, !pfx, !try_tmpdir) ok
3454@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok
3455This function constructs and returns a valid file name that does not
3456refer to any existing file. If the @var{result} argument is a null
3457pointer, the return value is a pointer to an internal static string,
3458which might be modified by subsequent calls and therefore makes this
3459function non-reentrant. Otherwise, the @var{result} argument should be
3460a pointer to an array of at least @code{L_tmpnam} characters, and the
3461result is written into that array.
3462
3463It is possible for @code{tmpnam} to fail if you call it too many times
3464without removing previously-created files. This is because the limited
3465length of the temporary file names gives room for only a finite number
3466of different names. If @code{tmpnam} fails it returns a null pointer.
3467
3468@strong{Warning:} Between the time the pathname is constructed and the
3469file is created another process might have created a file with the same
3470name using @code{tmpnam}, leading to a possible security hole. The
3471implementation generates names which can hardly be predicted, but when
3472opening the file you should use the @code{O_EXCL} flag. Using
3473@code{tmpfile} or @code{mkstemp} is a safe way to avoid this problem.
3474@end deftypefun
3475
3476@comment stdio.h
3477@comment GNU
3478@deftypefun {char *} tmpnam_r (char *@var{result})
3479@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3480This function is nearly identical to the @code{tmpnam} function, except
3481that if @var{result} is a null pointer it returns a null pointer.
3482
3483This guarantees reentrancy because the non-reentrant situation of
3484@code{tmpnam} cannot happen here.
3485
3486@strong{Warning}: This function has the same security problems as
3487@code{tmpnam}.
3488@end deftypefun
3489
3490@comment stdio.h
3491@comment ISO
3492@deftypevr Macro int L_tmpnam
3493The value of this macro is an integer constant expression that
3494represents the minimum size of a string large enough to hold a file name
3495generated by the @code{tmpnam} function.
3496@end deftypevr
3497
3498@comment stdio.h
3499@comment ISO
3500@deftypevr Macro int TMP_MAX
3501The macro @code{TMP_MAX} is a lower bound for how many temporary names
3502you can create with @code{tmpnam}. You can rely on being able to call
3503@code{tmpnam} at least this many times before it might fail saying you
3504have made too many temporary file names.
3505
3506With @theglibc{}, you can create a very large number of temporary
3507file names. If you actually created the files, you would probably run
3508out of disk space before you ran out of names. Some other systems have
3509a fixed, small limit on the number of temporary files. The limit is
3510never less than @code{25}.
3511@end deftypevr
3512
3513@comment stdio.h
3514@comment SVID
3515@deftypefun {char *} tempnam (const char *@var{dir}, const char *@var{prefix})
3516@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
3517@c There's no way (short of being setuid) to avoid getenv("TMPDIR"),
3518@c even with a non-NULL dir.
3519@c
3520@c __path_search (internal buf, dir, pfx, try_tmpdir) unsafe getenv
3521@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok
3522@c strdup
3523This function generates a unique temporary file name. If @var{prefix}
3524is not a null pointer, up to five characters of this string are used as
3525a prefix for the file name. The return value is a string newly
3526allocated with @code{malloc}, so you should release its storage with
3527@code{free} when it is no longer needed.
3528
3529Because the string is dynamically allocated this function is reentrant.
3530
3531The directory prefix for the temporary file name is determined by
3532testing each of the following in sequence. The directory must exist and
3533be writable.
3534
3535@itemize @bullet
3536@item
3537The environment variable @code{TMPDIR}, if it is defined. For security
3538reasons this only happens if the program is not SUID or SGID enabled.
3539
3540@item
3541The @var{dir} argument, if it is not a null pointer.
3542
3543@item
3544The value of the @code{P_tmpdir} macro.
3545
3546@item
3547The directory @file{/tmp}.
3548@end itemize
3549
3550This function is defined for SVID compatibility.
3551
3552@strong{Warning:} Between the time the pathname is constructed and the
3553file is created another process might have created a file with the same
3554name using @code{tempnam}, leading to a possible security hole. The
3555implementation generates names which can hardly be predicted, but when
3556opening the file you should use the @code{O_EXCL} flag. Using
3557@code{tmpfile} or @code{mkstemp} is a safe way to avoid this problem.
3558@end deftypefun
3559@cindex TMPDIR environment variable
3560
3561@comment stdio.h
3562@comment SVID
3563@c !!! are we putting SVID/GNU/POSIX.1/BSD in here or not??
3564@deftypevr {SVID Macro} {char *} P_tmpdir
3565This macro is the name of the default directory for temporary files.
3566@end deftypevr
3567
3568Older Unix systems did not have the functions just described. Instead
3569they used @code{mktemp} and @code{mkstemp}. Both of these functions
3570work by modifying a file name template string you pass. The last six
3571characters of this string must be @samp{XXXXXX}. These six @samp{X}s
3572are replaced with six characters which make the whole string a unique
3573file name. Usually the template string is something like
3574@samp{/tmp/@var{prefix}XXXXXX}, and each program uses a unique @var{prefix}.
3575
3576@strong{NB:} Because @code{mktemp} and @code{mkstemp} modify the
3577template string, you @emph{must not} pass string constants to them.
3578String constants are normally in read-only storage, so your program
3579would crash when @code{mktemp} or @code{mkstemp} tried to modify the
3580string. These functions are declared in the header file @file{stdlib.h}.
3581@pindex stdlib.h
3582
3583@comment stdlib.h
3584@comment Unix
3585@deftypefun {char *} mktemp (char *@var{template})
3586@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3587@c __gen_tempname (caller tmpl, __GT_NOCREATE) ok
3588The @code{mktemp} function generates a unique file name by modifying
3589@var{template} as described above. If successful, it returns
3590@var{template} as modified. If @code{mktemp} cannot find a unique file
3591name, it makes @var{template} an empty string and returns that. If
3592@var{template} does not end with @samp{XXXXXX}, @code{mktemp} returns a
3593null pointer.
3594
3595@strong{Warning:} Between the time the pathname is constructed and the
3596file is created another process might have created a file with the same
3597name using @code{mktemp}, leading to a possible security hole. The
3598implementation generates names which can hardly be predicted, but when
3599opening the file you should use the @code{O_EXCL} flag. Using
3600@code{mkstemp} is a safe way to avoid this problem.
3601@end deftypefun
3602
3603@comment stdlib.h
3604@comment BSD
3605@deftypefun int mkstemp (char *@var{template})
3606@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
3607@c __gen_tempname (caller tmpl, __GT_FILE) ok
3608The @code{mkstemp} function generates a unique file name just as
3609@code{mktemp} does, but it also opens the file for you with @code{open}
3610(@pxref{Opening and Closing Files}). If successful, it modifies
3611@var{template} in place and returns a file descriptor for that file open
3612for reading and writing. If @code{mkstemp} cannot create a
3613uniquely-named file, it returns @code{-1}. If @var{template} does not
3614end with @samp{XXXXXX}, @code{mkstemp} returns @code{-1} and does not
3615modify @var{template}.
3616
3617The file is opened using mode @code{0600}. If the file is meant to be
3618used by other users this mode must be changed explicitly.
3619@end deftypefun
3620
3621Unlike @code{mktemp}, @code{mkstemp} is actually guaranteed to create a
3622unique file that cannot possibly clash with any other program trying to
3623create a temporary file. This is because it works by calling
3624@code{open} with the @code{O_EXCL} flag, which says you want to create a
3625new file and get an error if the file already exists.
3626
3627@comment stdlib.h
3628@comment BSD
3629@deftypefun {char *} mkdtemp (char *@var{template})
3630@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
3631@c __gen_tempname (caller tmpl, __GT_DIR) ok
3632The @code{mkdtemp} function creates a directory with a unique name. If
3633it succeeds, it overwrites @var{template} with the name of the
3634directory, and returns @var{template}. As with @code{mktemp} and
3635@code{mkstemp}, @var{template} should be a string ending with
3636@samp{XXXXXX}.
3637
3638If @code{mkdtemp} cannot create an uniquely named directory, it returns
3639@code{NULL} and sets @var{errno} appropriately. If @var{template} does
3640not end with @samp{XXXXXX}, @code{mkdtemp} returns @code{NULL} and does
3641not modify @var{template}. @var{errno} will be set to @code{EINVAL} in
3642this case.
3643
3644The directory is created using mode @code{0700}.
3645@end deftypefun
3646
3647The directory created by @code{mkdtemp} cannot clash with temporary
3648files or directories created by other users. This is because directory
3649creation always works like @code{open} with @code{O_EXCL}.
3650@xref{Creating Directories}.
3651
3652The @code{mkdtemp} function comes from OpenBSD.
3653
3654@c FIXME these are undocumented:
3655@c faccessat
3656@c fchmodat
3657@c fchownat
3658@c futimesat
3659@c fstatat (there's a commented-out safety assessment for this one)
3660@c linkat
3661@c mkdirat
3662@c mkfifoat
3663@c name_to_handle_at
3664@c openat
3665@c open_by_handle_at
3666@c readlinkat
3667@c renameat
3668@c scandirat
3669@c symlinkat
3670@c unlinkat
3671@c utimensat
3672@c mknodat