diff options
Diffstat (limited to 'manual/filesys.texi')
-rw-r--r-- | manual/filesys.texi | 389 |
1 files changed, 131 insertions, 258 deletions
diff --git a/manual/filesys.texi b/manual/filesys.texi index e3fe323..5f7eb0e 100644 --- a/manual/filesys.texi +++ b/manual/filesys.texi @@ -55,9 +55,8 @@ Prototypes for these functions are declared in the header file @file{unistd.h}. @pindex unistd.h -@comment unistd.h -@comment POSIX.1 @deftypefun {char *} getcwd (char *@var{buffer}, size_t @var{size}) +@standards{POSIX.1, unistd.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c If buffer is NULL, this function calls malloc and realloc, and, in @c case of error, free. Linux offers a getcwd syscall that we use on @@ -132,9 +131,8 @@ gnu_getcwd () not a library function but is a customary name used in most GNU software. -@comment unistd.h -@comment BSD @deftypefn {Deprecated Function} {char *} getwd (char *@var{buffer}) +@standards{BSD, unistd.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{} @acsfd{}}} @c Besides the getcwd safety issues, it calls strerror_r on error, which @c brings in all of the i18n issues. @@ -149,9 +147,8 @@ necessarily enough space to contain the directory name. That is why this function is deprecated. @end deftypefn -@comment unistd.h -@comment GNU @deftypefun {char *} get_current_dir_name (void) +@standards{GNU, unistd.h} @safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c Besides getcwd, which this function calls as a fallback, it calls @c getenv, with the potential thread-safety issues that brings about. @@ -167,9 +164,8 @@ therefore yield a different result. This function is a GNU extension. @end deftypefun -@comment unistd.h -@comment POSIX.1 @deftypefun int chdir (const char *@var{filename}) +@standards{POSIX.1, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This function is used to set the process's working directory to @var{filename}. @@ -181,9 +177,8 @@ syntax errors (@pxref{File Name Errors}), plus @code{ENOTDIR} if the file @var{filename} is not a directory. @end deftypefun -@comment unistd.h -@comment XPG @deftypefun int fchdir (int @var{filedes}) +@standards{XPG, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This function is used to set the process's working directory to directory associated with the file descriptor @var{filedes}. @@ -256,9 +251,8 @@ This section describes what you find in a single directory entry, as you might obtain it from a directory stream. All the symbols are declared in the header file @file{dirent.h}. -@comment dirent.h -@comment POSIX.1 @deftp {Data Type} {struct dirent} +@standards{POSIX.1, dirent.h} This is a structure type used to return information about directory entries. It contains the following fields: @@ -318,16 +312,14 @@ corresponds to the file type bits in the @code{st_mode} member of value is DT_UNKNOWN. These two macros convert between @code{d_type} values and @code{st_mode} values: -@comment dirent.h -@comment BSD @deftypefun int IFTODT (mode_t @var{mode}) +@standards{BSD, dirent.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This returns the @code{d_type} value corresponding to @var{mode}. @end deftypefun -@comment dirent.h -@comment BSD @deftypefun mode_t DTTOIF (int @var{dtype}) +@standards{BSD, dirent.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This returns the @code{st_mode} value corresponding to @var{dtype}. @end deftypefun @@ -357,9 +349,8 @@ Attributes}. This section describes how to open a directory stream. All the symbols are declared in the header file @file{dirent.h}. -@comment dirent.h -@comment POSIX.1 @deftp {Data Type} DIR +@standards{POSIX.1, dirent.h} The @code{DIR} data type represents a directory stream. @end deftp @@ -368,9 +359,8 @@ You shouldn't ever allocate objects of the @code{struct dirent} or you. Instead, you refer to these objects using the pointers returned by the following functions. -@comment dirent.h -@comment POSIX.1 @deftypefun {DIR *} opendir (const char *@var{dirname}) +@standards{POSIX.1, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c Besides the safe syscall, we have to allocate the DIR object with @c __alloc_dir, that calls malloc. @@ -410,9 +400,8 @@ Or the way @code{opendir} implicitly creates a file descriptor for the directory is not the way a program might want it. In these cases an alternative interface can be used. -@comment dirent.h -@comment GNU @deftypefun {DIR *} fdopendir (int @var{fd}) +@standards{GNU, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c The DIR object is allocated with __alloc_dir, that calls malloc. The @code{fdopendir} function works just like @code{opendir} but @@ -456,9 +445,8 @@ was exposed and programs could access the fields. This does not happen in @theglibc{}. Instead a separate function is provided to allow access. -@comment dirent.h -@comment GNU @deftypefun int dirfd (DIR *@var{dirstream}) +@standards{GNU, dirent.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The function @code{dirfd} returns the file descriptor associated with the directory stream @var{dirstream}. This descriptor can be used until @@ -475,9 +463,8 @@ This section describes how to read directory entries from a directory stream, and how to close the stream when you are done with it. All the symbols are declared in the header file @file{dirent.h}. -@comment dirent.h -@comment POSIX.1 @deftypefun {struct dirent *} readdir (DIR *@var{dirstream}) +@standards{POSIX.1, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} @c This function holds dirstream's non-recursive lock, which brings @c about the usual issues with locks and async signals and cancellation, @@ -527,9 +514,8 @@ has problems with very long filenames (see below). We recommend you use @code{readdir}, but do not share @code{DIR} objects. @end deftypefun -@comment dirent.h -@comment GNU @deftypefun int readdir_r (DIR *@var{dirstream}, struct dirent *@var{entry}, struct dirent **@var{result}) +@standards{GNU, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} This function is a version of @code{readdir} which performs internal locking. Like @code{readdir} it returns the next entry from the @@ -600,9 +586,8 @@ Code to call @code{readdir_r} could look like this: To support large filesystems on 32-bit machines there are LFS variants of the last two functions. -@comment dirent.h -@comment LFS @deftypefun {struct dirent64 *} readdir64 (DIR *@var{dirstream}) +@standards{LFS, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} The @code{readdir64} function is just like the @code{readdir} function except that it returns a pointer to a record of type @code{struct @@ -612,9 +597,8 @@ might have a different size to allow large filesystems. In all other aspects this function is equivalent to @code{readdir}. @end deftypefun -@comment dirent.h -@comment LFS @deftypefun int readdir64_r (DIR *@var{dirstream}, struct dirent64 *@var{entry}, struct dirent64 **@var{result}) +@standards{LFS, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} The deprecated @code{readdir64_r} function is equivalent to the @code{readdir_r} function except that it takes parameters of base type @@ -623,9 +607,8 @@ third position. The same precautions mentioned in the documentation of @code{readdir_r} also apply here. @end deftypefun -@comment dirent.h -@comment POSIX.1 @deftypefun int closedir (DIR *@var{dirstream}) +@standards{POSIX.1, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@acsmem{} @acsfd{} @aculock{/hurd}}} @c No synchronization in the posix implementation, only in the hurd @c one. This is regarded as safe because it is undefined behavior if @@ -666,9 +649,8 @@ This section describes how to reread parts of a directory that you have already read from an open directory stream. All the symbols are declared in the header file @file{dirent.h}. -@comment dirent.h -@comment POSIX.1 @deftypefun void rewinddir (DIR *@var{dirstream}) +@standards{POSIX.1, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} The @code{rewinddir} function is used to reinitialize the directory stream @var{dirstream}, so that if you call @code{readdir} it @@ -680,9 +662,8 @@ added or removed since you last called @code{opendir} or @code{rewinddir}.) @end deftypefun -@comment dirent.h -@comment BSD @deftypefun {long int} telldir (DIR *@var{dirstream}) +@standards{BSD, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}} @c The implementation is safe on most platforms, but on BSD it uses @c cookies, buckets and records, and the global array of pointers to @@ -692,9 +673,8 @@ stream @var{dirstream}. You can use this value with @code{seekdir} to restore the directory stream to that position. @end deftypefun -@comment dirent.h -@comment BSD @deftypefun void seekdir (DIR *@var{dirstream}, long int @var{pos}) +@standards{BSD, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}} @c The implementation is safe on most platforms, but on BSD it uses @c cookies, buckets and records, and the global array of pointers to @@ -715,9 +695,9 @@ A higher-level interface to the directory handling functions is the entries in a directory, possibly sort them and get a list of names as the result. -@comment dirent.h -@comment BSD, SVID @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 **)) +@standards{BSD, dirent.h} +@standards{SVID, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c The scandir function calls __opendirat, __readdir, and __closedir to @c go over the named dir; malloc and realloc to allocate the namelist @@ -758,9 +738,9 @@ must be a pointer to a sorting function. For the convenience of the programmer @theglibc{} contains implementations of functions which are very helpful for this purpose. -@comment dirent.h -@comment BSD, SVID @deftypefun int alphasort (const struct dirent **@var{a}, const struct dirent **@var{b}) +@standards{BSD, dirent.h} +@standards{SVID, dirent.h} @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} @c Calls strcoll. The @code{alphasort} function behaves like the @code{strcoll} function @@ -772,9 +752,8 @@ The return value of @code{alphasort} is less than, equal to, or greater than zero depending on the order of the two entries @var{a} and @var{b}. @end deftypefun -@comment dirent.h -@comment GNU @deftypefun int versionsort (const struct dirent **@var{a}, const struct dirent **@var{b}) +@standards{GNU, dirent.h} @safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} @c Calls strverscmp, which will accesses the locale object multiple @c times. @@ -787,9 +766,8 @@ anymore since the @code{dirent} structure might not able to contain all the information. The LFS provides the new type @w{@code{struct dirent64}}. To use this we need a new function. -@comment dirent.h -@comment GNU @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 **)) +@standards{GNU, dirent.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c See scandir. The @code{scandir64} function works like the @code{scandir} function @@ -807,9 +785,8 @@ As @var{cmp} is now a function of a different type, the functions @code{alphasort} and @code{versionsort} cannot be supplied for that argument. Instead we provide the two replacement functions below. -@comment dirent.h -@comment GNU @deftypefun int alphasort64 (const struct dirent64 **@var{a}, const struct dirent **@var{b}) +@standards{GNU, dirent.h} @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} @c See alphasort. The @code{alphasort64} function behaves like the @code{strcoll} function @@ -821,9 +798,8 @@ Return value of @code{alphasort64} is less than, equal to, or greater than zero depending on the order of the two entries @var{a} and @var{b}. @end deftypefun -@comment dirent.h -@comment GNU @deftypefun int versionsort64 (const struct dirent64 **@var{a}, const struct dirent64 **@var{b}) +@standards{GNU, dirent.h} @safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} @c See versionsort. The @code{versionsort64} function is like @code{alphasort64}, excepted that it @@ -871,9 +847,8 @@ their 64-bit counterparts @code{ftw64} and @code{nftw64}. These functions take as one of their arguments a pointer to a callback function of the appropriate type. -@comment ftw.h -@comment GNU @deftp {Data Type} __ftw_func_t +@standards{GNU, ftw.h} @smallexample int (*) (const char *, const struct stat *, int) @@ -917,9 +892,8 @@ type is in fact @code{__ftw64_func_t} since this mode changes For the LFS interface and for use in the function @code{ftw64}, the header @file{ftw.h} defines another function type. -@comment ftw.h -@comment GNU @deftp {Data Type} __ftw64_func_t +@standards{GNU, ftw.h} @smallexample int (*) (const char *, const struct stat64 *, int) @@ -931,9 +905,8 @@ parameter to the function is a pointer to a variable of type @code{struct stat64} which is able to represent the larger values. @end deftp -@comment ftw.h -@comment GNU @deftp {Data Type} __nftw_func_t +@standards{GNU, ftw.h} @smallexample int (*) (const char *, const struct stat *, int, struct FTW *) @@ -963,9 +936,8 @@ type is in fact @code{__nftw64_func_t} since this mode changes For the LFS interface there is also a variant of this data type available which has to be used with the @code{nftw64} function. -@comment ftw.h -@comment GNU @deftp {Data Type} __nftw64_func_t +@standards{GNU, ftw.h} @smallexample int (*) (const char *, const struct stat64 *, int, struct FTW *) @@ -977,9 +949,8 @@ parameter to the function is this time a pointer to a variable of type @code{struct stat64} which is able to represent the larger values. @end deftp -@comment ftw.h -@comment XPG4.2 @deftp {Data Type} {struct FTW} +@standards{XPG4.2, ftw.h} The information contained in this structure helps in interpreting the name parameter and gives some information about the current state of the traversal of the directory hierarchy. @@ -1001,9 +972,8 @@ file was passed). @end deftp -@comment ftw.h -@comment SVID @deftypefun int ftw (const char *@var{filename}, __ftw_func_t @var{func}, int @var{descriptors}) +@standards{SVID, ftw.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c see nftw for safety details The @code{ftw} function calls the callback function given in the @@ -1053,9 +1023,8 @@ When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a interface transparently replaces the old interface. @end deftypefun -@comment ftw.h -@comment Unix98 @deftypefun int ftw64 (const char *@var{filename}, __ftw64_func_t @var{func}, int @var{descriptors}) +@standards{Unix98, ftw.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} This function is similar to @code{ftw} but it can work on filesystems with large files. File information is reported using a variable of type @@ -1067,9 +1036,8 @@ When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a transparently replaces the old implementation. @end deftypefun -@comment ftw.h -@comment XPG4.2 @deftypefun int nftw (const char *@var{filename}, __nftw_func_t @var{func}, int @var{descriptors}, int @var{flag}) +@standards{XPG4.2, ftw.h} @safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}} @c ftw_startup calls alloca, malloc, free, xstat/lxstat, tdestroy, and ftw_dir @c if FTW_CHDIR, call open, and fchdir, or chdir and getcwd @@ -1138,9 +1106,8 @@ When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a interface transparently replaces the old interface. @end deftypefun -@comment ftw.h -@comment Unix98 @deftypefun int nftw64 (const char *@var{filename}, __nftw64_func_t @var{func}, int @var{descriptors}, int @var{flag}) +@standards{Unix98, ftw.h} @safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}} This function is similar to @code{nftw} but it can work on filesystems with large files. File information is reported using a variable of type @@ -1182,9 +1149,8 @@ The prototype for the @code{link} function is declared in the header file @file{unistd.h}. @pindex unistd.h -@comment unistd.h -@comment POSIX.1 @deftypefun int link (const char *@var{oldname}, const char *@var{newname}) +@standards{POSIX.1, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{link} function makes a new link to the existing file named by @var{oldname}, under the new name @var{newname}. @@ -1274,9 +1240,8 @@ Some systems have, for some functions operating on files, a limit on how many symbolic links are followed when resolving a path name. The limit if it exists is published in the @file{sys/param.h} header file. -@comment sys/param.h -@comment BSD @deftypevr Macro int MAXSYMLINKS +@standards{BSD, sys/param.h} The macro @code{MAXSYMLINKS} specifies how many symlinks some function will follow before returning @code{ELOOP}. Not all functions behave the @@ -1290,9 +1255,8 @@ Prototypes for most of the functions listed in this section are in @file{unistd.h}. @pindex unistd.h -@comment unistd.h -@comment BSD @deftypefun int symlink (const char *@var{oldname}, const char *@var{newname}) +@standards{BSD, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{symlink} function makes a symbolic link to @var{oldname} named @var{newname}. @@ -1328,9 +1292,8 @@ exceeded. @end table @end deftypefun -@comment unistd.h -@comment BSD @deftypefun ssize_t readlink (const char *@var{filename}, char *@var{buffer}, size_t @var{size}) +@standards{BSD, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{readlink} function gets the value of the symbolic link @var{filename}. The file name that the link points to is copied into @@ -1388,9 +1351,8 @@ and no filename in the path is @code{.} or @code{..}. This is for instance desirable if files have to be compared in which case different names can refer to the same inode. -@comment stdlib.h -@comment GNU @deftypefun {char *} canonicalize_file_name (const char *@var{name}) +@standards{GNU, stdlib.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c Calls realpath. @@ -1431,9 +1393,8 @@ The Unix standard includes a similar function which differs from @code{canonicalize_file_name} in that the user has to provide the buffer where the result is placed in. -@comment stdlib.h -@comment XPG @deftypefun {char *} realpath (const char *restrict @var{name}, char *restrict @var{resolved}) +@standards{XPG, stdlib.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} @c Calls malloc, realloc, getcwd, lxstat64, readlink, alloca. @@ -1472,9 +1433,8 @@ Deletion actually deletes a file name. If this is the file's only name, then the file is deleted as well. If the file has other remaining names (@pxref{Hard Links}), it remains accessible under those names. -@comment unistd.h -@comment POSIX.1 @deftypefun int unlink (const char *@var{filename}) +@standards{POSIX.1, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{unlink} function deletes the file name @var{filename}. If this is a file's sole name, the file itself is also deleted. (Actually, @@ -1515,9 +1475,8 @@ file system and can't be modified. @end table @end deftypefun -@comment unistd.h -@comment POSIX.1 @deftypefun int rmdir (const char *@var{filename}) +@standards{POSIX.1, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @cindex directories, deleting @cindex deleting a directory @@ -1543,9 +1502,8 @@ The prototype for this function is declared in the header file @pindex unistd.h @end deftypefun -@comment stdio.h -@comment ISO @deftypefun int remove (const char *@var{filename}) +@standards{ISO, stdio.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Calls unlink and rmdir. This is the @w{ISO C} function to remove a file. It works like @@ -1560,9 +1518,8 @@ This is the @w{ISO C} function to remove a file. It works like The @code{rename} function is used to change a file's name. @cindex renaming a file -@comment stdio.h -@comment ISO @deftypefun int rename (const char *@var{oldname}, const char *@var{newname}) +@standards{ISO, stdio.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c In the absence of a rename syscall, there's an emulation with link @c and unlink, but it's racy, even more so if newname exists and is @@ -1659,9 +1616,8 @@ Directories are created with the @code{mkdir} function. (There is also a shell command @code{mkdir} which does the same thing.) @c !!! umask -@comment sys/stat.h -@comment POSIX.1 @deftypefun int mkdir (const char *@var{filename}, mode_t @var{mode}) +@standards{POSIX.1, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{mkdir} function creates a new, empty directory with name @var{filename}. @@ -1751,9 +1707,8 @@ The header file @file{sys/stat.h} declares all the symbols defined in this section. @pindex sys/stat.h -@comment sys/stat.h -@comment POSIX.1 @deftp {Data Type} {struct stat} +@standards{POSIX.1, sys/stat.h} The @code{stat} structure type is used to return information about the attributes of a file. It contains at least the following members: @@ -1847,9 +1802,8 @@ The extensions for the Large File Support (LFS) require, even on 32-bit machines, types which can handle file sizes up to @twoexp{63}. Therefore a new definition of @code{struct stat} is necessary. -@comment sys/stat.h -@comment LFS @deftp {Data Type} {struct stat64} +@standards{LFS, sys/stat.h} The members of this type are the same and have the same names as those in @code{struct stat}. The only difference is that the members @code{st_ino}, @code{st_size}, and @code{st_blocks} have a different @@ -1930,18 +1884,16 @@ integer types that you know and love.) These typedef names are defined in the header file @file{sys/types.h} as well as in @file{sys/stat.h}. Here is a list of them. -@comment sys/types.h -@comment POSIX.1 @deftp {Data Type} mode_t +@standards{POSIX.1, sys/types.h} This is an integer data type used to represent file modes. In @theglibc{}, this is an unsigned type no narrower than @code{unsigned int}. @end deftp @cindex inode number -@comment sys/types.h -@comment POSIX.1 @deftp {Data Type} ino_t +@standards{POSIX.1, sys/types.h} This is an unsigned integer type used to represent file serial numbers. (In Unix jargon, these are sometimes called @dfn{inode numbers}.) In @theglibc{}, this type is no narrower than @code{unsigned int}. @@ -1950,9 +1902,8 @@ If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type is transparently replaced by @code{ino64_t}. @end deftp -@comment sys/types.h -@comment Unix98 @deftp {Data Type} ino64_t +@standards{Unix98, sys/types.h} This is an unsigned integer type used to represent file serial numbers for the use in LFS. In @theglibc{}, this type is no narrower than @code{unsigned int}. @@ -1961,22 +1912,19 @@ When compiling with @code{_FILE_OFFSET_BITS == 64} this type is available under the name @code{ino_t}. @end deftp -@comment sys/types.h -@comment POSIX.1 @deftp {Data Type} dev_t +@standards{POSIX.1, sys/types.h} This is an arithmetic data type used to represent file device numbers. In @theglibc{}, this is an integer type no narrower than @code{int}. @end deftp -@comment sys/types.h -@comment POSIX.1 @deftp {Data Type} nlink_t +@standards{POSIX.1, sys/types.h} This is an integer type used to represent file link counts. @end deftp -@comment sys/types.h -@comment Unix98 @deftp {Data Type} blkcnt_t +@standards{Unix98, sys/types.h} This is a signed integer type used to represent block counts. In @theglibc{}, this type is no narrower than @code{int}. @@ -1984,9 +1932,8 @@ If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type is transparently replaced by @code{blkcnt64_t}. @end deftp -@comment sys/types.h -@comment Unix98 @deftp {Data Type} blkcnt64_t +@standards{Unix98, sys/types.h} This is a signed integer type used to represent block counts for the use in LFS. In @theglibc{}, this type is no narrower than @code{int}. @@ -2002,9 +1949,8 @@ To examine the attributes of files, use the functions @code{stat}, a @code{struct stat} object. All three functions are declared in the header file @file{sys/stat.h}. -@comment sys/stat.h -@comment POSIX.1 @deftypefun int stat (const char *@var{filename}, struct stat *@var{buf}) +@standards{POSIX.1, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{stat} function returns information about the attributes of the file named by @w{@var{filename}} in the structure pointed to by @var{buf}. @@ -2029,9 +1975,8 @@ function is in fact @code{stat64} since the LFS interface transparently replaces the normal implementation. @end deftypefun -@comment sys/stat.h -@comment Unix98 @deftypefun int stat64 (const char *@var{filename}, struct stat64 *@var{buf}) +@standards{Unix98, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This function is similar to @code{stat} but it is also able to work on files larger than @twoexp{31} bytes on 32-bit systems. To be able to do @@ -2043,9 +1988,8 @@ function is available under the name @code{stat} and so transparently replaces the interface for small files on 32-bit machines. @end deftypefun -@comment sys/stat.h -@comment POSIX.1 @deftypefun int fstat (int @var{filedes}, struct stat *@var{buf}) +@standards{POSIX.1, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{fstat} function is like @code{stat}, except that it takes an open file descriptor as an argument instead of a file name. @@ -2065,9 +2009,8 @@ function is in fact @code{fstat64} since the LFS interface transparently replaces the normal implementation. @end deftypefun -@comment sys/stat.h -@comment Unix98 @deftypefun int fstat64 (int @var{filedes}, struct stat64 *@var{buf}) +@standards{Unix98, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This function is similar to @code{fstat} but is able to work on large files on 32-bit platforms. For large files the file descriptor @@ -2084,9 +2027,8 @@ replaces the interface for small files on 32-bit machines. @c available. @c @safety{@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} -@comment sys/stat.h -@comment BSD @deftypefun int lstat (const char *@var{filename}, struct stat *@var{buf}) +@standards{BSD, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Direct system call through lxstat, sometimes with an xstat conv call @c afterwards. @@ -2100,9 +2042,8 @@ function is in fact @code{lstat64} since the LFS interface transparently replaces the normal implementation. @end deftypefun -@comment sys/stat.h -@comment Unix98 @deftypefun int lstat64 (const char *@var{filename}, struct stat64 *@var{buf}) +@standards{Unix98, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Direct system call through lxstat64, sometimes with an xstat conv @c call afterwards. @@ -2141,55 +2082,48 @@ The following predicate macros test the type of a file, given the value @var{m} which is the @code{st_mode} field returned by @code{stat} on that file: -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_ISDIR (mode_t @var{m}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This macro returns non-zero if the file is a directory. @end deftypefn -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_ISCHR (mode_t @var{m}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This macro returns non-zero if the file is a character special file (a device like a terminal). @end deftypefn -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_ISBLK (mode_t @var{m}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This macro returns non-zero if the file is a block special file (a device like a disk). @end deftypefn -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_ISREG (mode_t @var{m}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This macro returns non-zero if the file is a regular file. @end deftypefn -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_ISFIFO (mode_t @var{m}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This macro returns non-zero if the file is a FIFO special file, or a pipe. @xref{Pipes and FIFOs}. @end deftypefn -@comment sys/stat.h -@comment GNU @deftypefn Macro int S_ISLNK (mode_t @var{m}) +@standards{GNU, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This macro returns non-zero if the file is a symbolic link. @xref{Symbolic Links}. @end deftypefn -@comment sys/stat.h -@comment GNU @deftypefn Macro int S_ISSOCK (mode_t @var{m}) +@standards{GNU, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This macro returns non-zero if the file is a socket. @xref{Sockets}. @end deftypefn @@ -2210,48 +2144,40 @@ is equivalent to: ((@var{mode} & S_IFMT) == S_IFCHR) @end smallexample -@comment sys/stat.h -@comment BSD @deftypevr Macro int S_IFMT +@standards{BSD, sys/stat.h} This is a bit mask used to extract the file type code from a mode value. @end deftypevr These are the symbolic names for the different file type codes: @vtable @code -@comment sys/stat.h -@comment BSD @item S_IFDIR +@standards{BSD, sys/stat.h} This is the file type constant of a directory file. -@comment sys/stat.h -@comment BSD @item S_IFCHR +@standards{BSD, sys/stat.h} This is the file type constant of a character-oriented device file. -@comment sys/stat.h -@comment BSD @item S_IFBLK +@standards{BSD, sys/stat.h} This is the file type constant of a block-oriented device file. -@comment sys/stat.h -@comment BSD @item S_IFREG +@standards{BSD, sys/stat.h} This is the file type constant of a regular file. -@comment sys/stat.h -@comment BSD @item S_IFLNK +@standards{BSD, sys/stat.h} This is the file type constant of a symbolic link. -@comment sys/stat.h -@comment BSD @item S_IFSOCK +@standards{BSD, sys/stat.h} This is the file type constant of a socket. -@comment sys/stat.h -@comment BSD @item S_IFIFO +@standards{BSD, sys/stat.h} This is the file type constant of a FIFO or pipe. @end vtable @@ -2263,27 +2189,24 @@ macros. But unlike the other macros they do not take the value of the @code{st_mode} field as the parameter. Instead they expect a pointer to the whole @code{struct stat} structure. -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_TYPEISMQ (struct stat *@var{s}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} If the system implements POSIX message queues as distinct objects and the file is a message queue object, this macro returns a non-zero value. In all other cases the result is zero. @end deftypefn -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_TYPEISSEM (struct stat *@var{s}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} If the system implements POSIX semaphores as distinct objects and the file is a semaphore object, this macro returns a non-zero value. In all other cases the result is zero. @end deftypefn -@comment sys/stat.h -@comment POSIX @deftypefn Macro int S_TYPEISSHM (struct stat *@var{s}) +@standards{POSIX, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} If the system implements POSIX shared memory objects as distinct objects and the file is a shared memory object, this macro returns a non-zero @@ -2326,9 +2249,8 @@ and @code{chgrp} shell commands. @pindex unistd.h The prototype for this function is declared in @file{unistd.h}. -@comment unistd.h -@comment POSIX.1 @deftypefun int chown (const char *@var{filename}, uid_t @var{owner}, gid_t @var{group}) +@standards{POSIX.1, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{chown} function changes the owner of the file @var{filename} to @var{owner}, and its group owner to @var{group}. @@ -2361,9 +2283,8 @@ The file is on a read-only file system. @end table @end deftypefun -@comment unistd.h -@comment BSD @deftypefun int fchown (int @var{filedes}, uid_t @var{owner}, gid_t @var{group}) +@standards{BSD, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This is like @code{chown}, except that it changes the owner of the open file with descriptor @var{filedes}. @@ -2407,97 +2328,79 @@ These symbolic constants are defined for the file mode bits that control access permission for the file: @vtable @code -@comment sys/stat.h -@comment POSIX.1 @item S_IRUSR -@comment sys/stat.h -@comment BSD @itemx S_IREAD +@standards{POSIX.1, sys/stat.h} +@standardsx{S_IREAD, BSD, sys/stat.h} Read permission bit for the owner of the file. On many systems this bit is 0400. @code{S_IREAD} is an obsolete synonym provided for BSD compatibility. -@comment sys/stat.h -@comment POSIX.1 @item S_IWUSR -@comment sys/stat.h -@comment BSD @itemx S_IWRITE +@standards{POSIX.1, sys/stat.h} +@standardsx{S_IWRITE, BSD, sys/stat.h} Write permission bit for the owner of the file. Usually 0200. @w{@code{S_IWRITE}} is an obsolete synonym provided for BSD compatibility. -@comment sys/stat.h -@comment POSIX.1 @item S_IXUSR -@comment sys/stat.h -@comment BSD @itemx S_IEXEC +@standards{POSIX.1, sys/stat.h} +@standardsx{S_IEXEC, BSD, sys/stat.h} Execute (for ordinary files) or search (for directories) permission bit for the owner of the file. Usually 0100. @code{S_IEXEC} is an obsolete synonym provided for BSD compatibility. -@comment sys/stat.h -@comment POSIX.1 @item S_IRWXU +@standards{POSIX.1, sys/stat.h} This is equivalent to @samp{(S_IRUSR | S_IWUSR | S_IXUSR)}. -@comment sys/stat.h -@comment POSIX.1 @item S_IRGRP +@standards{POSIX.1, sys/stat.h} Read permission bit for the group owner of the file. Usually 040. -@comment sys/stat.h -@comment POSIX.1 @item S_IWGRP +@standards{POSIX.1, sys/stat.h} Write permission bit for the group owner of the file. Usually 020. -@comment sys/stat.h -@comment POSIX.1 @item S_IXGRP +@standards{POSIX.1, sys/stat.h} Execute or search permission bit for the group owner of the file. Usually 010. -@comment sys/stat.h -@comment POSIX.1 @item S_IRWXG +@standards{POSIX.1, sys/stat.h} This is equivalent to @samp{(S_IRGRP | S_IWGRP | S_IXGRP)}. -@comment sys/stat.h -@comment POSIX.1 @item S_IROTH +@standards{POSIX.1, sys/stat.h} Read permission bit for other users. Usually 04. -@comment sys/stat.h -@comment POSIX.1 @item S_IWOTH +@standards{POSIX.1, sys/stat.h} Write permission bit for other users. Usually 02. -@comment sys/stat.h -@comment POSIX.1 @item S_IXOTH +@standards{POSIX.1, sys/stat.h} Execute or search permission bit for other users. Usually 01. -@comment sys/stat.h -@comment POSIX.1 @item S_IRWXO +@standards{POSIX.1, sys/stat.h} This is equivalent to @samp{(S_IROTH | S_IWOTH | S_IXOTH)}. -@comment sys/stat.h -@comment POSIX @item S_ISUID +@standards{POSIX, sys/stat.h} This is the set-user-ID on execute bit, usually 04000. @xref{How Change Persona}. -@comment sys/stat.h -@comment POSIX @item S_ISGID +@standards{POSIX, sys/stat.h} This is the set-group-ID on execute bit, usually 02000. @xref{How Change Persona}. @cindex sticky bit -@comment sys/stat.h -@comment BSD @item S_ISVTX +@standards{BSD, sys/stat.h} This is the @dfn{sticky} bit, usually 01000. For a directory it gives permission to delete a file in that directory @@ -2624,9 +2527,8 @@ changing the umask is usually done only by shells. They use the The functions in this section are declared in @file{sys/stat.h}. @pindex sys/stat.h -@comment sys/stat.h -@comment POSIX.1 @deftypefun mode_t umask (mode_t @var{mask}) +@standards{POSIX.1, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{umask} function sets the file creation mask of the current process to @var{mask}, and returns the previous value of the file @@ -2650,18 +2552,16 @@ However, on @gnuhurdsystems{} it is better to use @code{getumask} if you just want to read the mask value, because it is reentrant. @end deftypefun -@comment sys/stat.h -@comment GNU @deftypefun mode_t getumask (void) +@standards{GNU, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} Return the current value of the file creation mask for the current process. This function is a GNU extension and is only available on @gnuhurdsystems{}. @end deftypefun -@comment sys/stat.h -@comment POSIX.1 @deftypefun int chmod (const char *@var{filename}, mode_t @var{mode}) +@standards{POSIX.1, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{chmod} function sets the access permission bits for the file named by @var{filename} to @var{mode}. @@ -2700,9 +2600,8 @@ for full details on the sticky bit. @end table @end deftypefun -@comment sys/stat.h -@comment BSD @deftypefun int fchmod (int @var{filedes}, mode_t @var{mode}) +@standards{BSD, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This is like @code{chmod}, except that it changes the permissions of the currently open file given by @var{filedes}. @@ -2771,9 +2670,8 @@ real ID. @pindex unistd.h The symbols in this section are declared in @file{unistd.h}. -@comment unistd.h -@comment POSIX.1 @deftypefun int access (const char *@var{filename}, int @var{how}) +@standards{POSIX.1, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} The @code{access} function checks to see whether the file named by @var{filename} can be accessed in the way specified by the @var{how} @@ -2812,27 +2710,23 @@ as the @var{how} argument to the @code{access} function. The values are integer constants. @pindex unistd.h -@comment unistd.h -@comment POSIX.1 @deftypevr Macro int R_OK +@standards{POSIX.1, unistd.h} Flag meaning test for read permission. @end deftypevr -@comment unistd.h -@comment POSIX.1 @deftypevr Macro int W_OK +@standards{POSIX.1, unistd.h} Flag meaning test for write permission. @end deftypevr -@comment unistd.h -@comment POSIX.1 @deftypevr Macro int X_OK +@standards{POSIX.1, unistd.h} Flag meaning test for execute/search permission. @end deftypevr -@comment unistd.h -@comment POSIX.1 @deftypevr Macro int F_OK +@standards{POSIX.1, unistd.h} Flag meaning test for existence of the file. @end deftypevr @@ -2876,9 +2770,8 @@ the @code{utime} function---all except the attribute change time. You need to include the header file @file{utime.h} to use this facility. @pindex utime.h -@comment utime.h -@comment POSIX.1 @deftp {Data Type} {struct utimbuf} +@standards{POSIX.1, utime.h} The @code{utimbuf} structure is used with the @code{utime} function to specify new access and modification times for a file. It contains the following members: @@ -2892,9 +2785,8 @@ This is the modification time for the file. @end table @end deftp -@comment utime.h -@comment POSIX.1 @deftypefun int utime (const char *@var{filename}, const struct utimbuf *@var{times}) +@standards{POSIX.1, utime.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c In the absence of a utime syscall, it non-atomically converts times @c to a struct timeval and calls utimes. @@ -2946,9 +2838,8 @@ the fractional part of the file times. The prototype for this function is in the header file @file{sys/time.h}. @pindex sys/time.h -@comment sys/time.h -@comment BSD @deftypefun int utimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]}) +@standards{BSD, sys/time.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c In the absence of a utimes syscall, it non-atomically converts tvp @c to struct timespec array and issues a utimensat syscall, or to @@ -2964,9 +2855,8 @@ The return values and error conditions are the same as for the @code{utime} function. @end deftypefun -@comment sys/time.h -@comment BSD @deftypefun int lutimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]}) +@standards{BSD, sys/time.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Since there's no lutimes syscall, it non-atomically converts tvp @c to struct timespec array and issues a utimensat syscall. @@ -2983,9 +2873,8 @@ The return values and error conditions are the same as for the @code{utime} function. @end deftypefun -@comment sys/time.h -@comment BSD @deftypefun int futimes (int @var{fd}, const struct timeval @var{tvp}@t{[2]}) +@standards{BSD, sys/time.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Since there's no futimes syscall, it non-atomically converts tvp @c to struct timespec array and issues a utimensat syscall, falling back @@ -3041,9 +2930,8 @@ Using these functions on anything other than a regular file gives @emph{undefined} results. On many systems, such a call will appear to succeed, without actually accomplishing anything. -@comment unistd.h -@comment X/Open @deftypefun int truncate (const char *@var{filename}, off_t @var{length}) +@standards{X/Open, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c In the absence of a truncate syscall, we use open and ftruncate. @@ -3087,9 +2975,8 @@ The operation was interrupted by a signal. @end deftypefun -@comment unistd.h -@comment Unix98 @deftypefun int truncate64 (const char *@var{name}, off64_t @var{length}) +@standards{Unix98, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c In the absence of a syscall, try truncate if length fits. This function is similar to the @code{truncate} function. The @@ -3102,9 +2989,8 @@ When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} on a @code{truncate} and so transparently replaces the 32 bits interface. @end deftypefun -@comment unistd.h -@comment POSIX @deftypefun int ftruncate (int @var{fd}, off_t @var{length}) +@standards{POSIX, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This is like @code{truncate}, but it works on a file descriptor @var{fd} @@ -3167,9 +3053,8 @@ The operation was interrupted by a signal. @end deftypefun -@comment unistd.h -@comment Unix98 @deftypefun int ftruncate64 (int @var{id}, off64_t @var{length}) +@standards{Unix98, unistd.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c In the absence of a syscall, try ftruncate if length fits. This function is similar to the @code{ftruncate} function. The @@ -3328,9 +3213,8 @@ this function for compatibility with BSD. The prototype for @code{mknod} is declared in @file{sys/stat.h}. @pindex sys/stat.h -@comment sys/stat.h -@comment BSD @deftypefun int mknod (const char *@var{filename}, mode_t @var{mode}, dev_t @var{dev}) +@standards{BSD, sys/stat.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Instead of issuing the syscall directly, we go through xmknod. @c Although the internal xmknod takes a dev_t*, that could lead to @@ -3383,9 +3267,8 @@ returns a pointer to a static buffer. These facilities are declared in the header file @file{stdio.h}. @pindex stdio.h -@comment stdio.h -@comment ISO @deftypefun {FILE *} tmpfile (void) +@standards{ISO, stdio.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}} @c The unsafety issues are those of fdopen, plus @acsfd because of the @c open. @@ -3413,9 +3296,8 @@ When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a interface transparently replaces the old interface. @end deftypefun -@comment stdio.h -@comment Unix98 @deftypefun {FILE *} tmpfile64 (void) +@standards{Unix98, stdio.h} @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}} This function is similar to @code{tmpfile}, but the stream it returns a pointer to was opened using @code{tmpfile64}. Therefore this stream can @@ -3429,9 +3311,8 @@ bits machine this function is available under the name @code{tmpfile} and so transparently replaces the old interface. @end deftypefun -@comment stdio.h -@comment ISO @deftypefun {char *} tmpnam (char *@var{result}) +@standards{ISO, stdio.h} @safety{@prelim{}@mtunsafe{@mtasurace{:tmpnam/!result}}@asunsafe{}@acsafe{}} @c The passed-in buffer should not be modified concurrently with the @c call. @@ -3458,9 +3339,8 @@ opening the file you should use the @code{O_EXCL} flag. Using @code{tmpfile} or @code{mkstemp} is a safe way to avoid this problem. @end deftypefun -@comment stdio.h -@comment GNU @deftypefun {char *} tmpnam_r (char *@var{result}) +@standards{GNU, stdio.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} This function is nearly identical to the @code{tmpnam} function, except that if @var{result} is a null pointer it returns a null pointer. @@ -3472,17 +3352,15 @@ This guarantees reentrancy because the non-reentrant situation of @code{tmpnam}. @end deftypefun -@comment stdio.h -@comment ISO @deftypevr Macro int L_tmpnam +@standards{ISO, stdio.h} The value of this macro is an integer constant expression that represents the minimum size of a string large enough to hold a file name generated by the @code{tmpnam} function. @end deftypevr -@comment stdio.h -@comment ISO @deftypevr Macro int TMP_MAX +@standards{ISO, stdio.h} The macro @code{TMP_MAX} is a lower bound for how many temporary names you can create with @code{tmpnam}. You can rely on being able to call @code{tmpnam} at least this many times before it might fail saying you @@ -3495,9 +3373,8 @@ a fixed, small limit on the number of temporary files. The limit is never less than @code{25}. @end deftypevr -@comment stdio.h -@comment SVID @deftypefun {char *} tempnam (const char *@var{dir}, const char *@var{prefix}) +@standards{SVID, stdio.h} @safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} @c There's no way (short of being setuid) to avoid getenv("TMPDIR"), @c even with a non-NULL dir. @@ -3544,9 +3421,8 @@ opening the file you should use the @code{O_EXCL} flag. Using @cindex TMPDIR environment variable @c !!! are we putting SVID/GNU/POSIX.1/BSD in here or not?? -@comment stdio.h -@comment SVID @deftypevr {SVID Macro} {char *} P_tmpdir +@standards{SVID, stdio.h} This macro is the name of the default directory for temporary files. @end deftypevr @@ -3565,9 +3441,8 @@ would crash when @code{mktemp} or @code{mkstemp} tried to modify the string. These functions are declared in the header file @file{stdlib.h}. @pindex stdlib.h -@comment stdlib.h -@comment Unix @deftypefun {char *} mktemp (char *@var{template}) +@standards{Unix, stdlib.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c __gen_tempname (caller tmpl, __GT_NOCREATE) ok The @code{mktemp} function generates a unique file name by modifying @@ -3585,9 +3460,8 @@ opening the file you should use the @code{O_EXCL} flag. Using @code{mkstemp} is a safe way to avoid this problem. @end deftypefun -@comment stdlib.h -@comment BSD @deftypefun int mkstemp (char *@var{template}) +@standards{BSD, stdlib.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} @c __gen_tempname (caller tmpl, __GT_FILE) ok The @code{mkstemp} function generates a unique file name just as @@ -3609,9 +3483,8 @@ create a temporary file. This is because it works by calling @code{open} with the @code{O_EXCL} flag, which says you want to create a new file and get an error if the file already exists. -@comment stdlib.h -@comment BSD @deftypefun {char *} mkdtemp (char *@var{template}) +@standards{BSD, stdlib.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c __gen_tempname (caller tmpl, __GT_DIR) ok The @code{mkdtemp} function creates a directory with a unique name. If |