1 .\"     $OpenBSD: stat.2,v 1.3 1997/02/13 05:20:55 millert Exp $
 
   3 .\" Copyright (c) 1980, 1991, 1993, 1994
 
   4 .\"     The Regents of the University of California.  All rights reserved.
 
   6 .\" Redistribution and use in source and binary forms, with or without
 
   7 .\" modification, are permitted provided that the following conditions
 
   9 .\" 1. Redistributions of source code must retain the above copyright
 
  10 .\"    notice, this list of conditions and the following disclaimer.
 
  11 .\" 2. Redistributions in binary form must reproduce the above copyright
 
  12 .\"    notice, this list of conditions and the following disclaimer in the
 
  13 .\"    documentation and/or other materials provided with the distribution.
 
  14 .\" 3. All advertising materials mentioning features or use of this software
 
  15 .\"    must display the following acknowledgement:
 
  16 .\"     This product includes software developed by the University of
 
  17 .\"     California, Berkeley and its contributors.
 
  18 .\" 4. Neither the name of the University nor the names of its contributors
 
  19 .\"    may be used to endorse or promote products derived from this software
 
  20 .\"    without specific prior written permission.
 
  22 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
  23 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
  24 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
  25 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
  26 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
  27 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
  28 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
  29 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
  30 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
  31 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
  34 .\"     @(#)stat.2      8.3 (Berkeley) 4/19/94
 
  48 .Fd #include <sys/stat.h>
 
  52 .Fa "struct stat *buf"
 
  56 .Fa "const char *restrict path"
 
  57 .Fa "struct stat *restrict buf"
 
  61 .Fa "const char *restrict path"
 
  62 .Fa "struct stat *restrict buf"
 
  64 .Sh TRANSITIIONAL SYNOPSIS (NOW DEPRECATED)
 
  69 .Fa "struct stat64 *buf"
 
  75 .Fa "const char *restrict path"
 
  76 .Fa "struct stat64 *restrict buf"
 
  82 .Fa "const char *restrict path"
 
  83 .Fa "struct stat64 *restrict buf"
 
  88 function obtains information about the file pointed to by
 
  90 Read, write or execute
 
  91 permission of the named file is not required, but all directories
 
  92 listed in the path name leading to the file must be searchable.
 
  99 except in the case where the named file is a symbolic link;
 
 101 returns information about the link,
 
 104 returns information about the file the link references.
 
 105 Unlike other filesystem objects,
 
 106 symbolic links may not have an owner, group, access mode, times, etc.
 
 107 Instead, these attributes may be taken from the directory that
 
 109 In this case, the only attributes returned from an
 
 111 that refer to the symbolic link itself are the file type (S_IFLNK),
 
 112 size, blocks, and link count (always 1).
 
 116 obtains the same information about an open file
 
 117 known by the file descriptor
 
 122 argument is a pointer to a
 
 127 and into which information is placed concerning the file.
 
 129 .Dv _DARWIN_FEATURE_64_BIT_INODE
 
 132 type is 32-bits), the
 
 134 structure is defined as:
 
 136 struct stat { /* when _DARWIN_FEATURE_64_BIT_INODE is NOT defined */
 
 137     dev_t    st_dev;    /* device inode resides on */
 
 138     ino_t    st_ino;    /* inode's number */
 
 139     mode_t   st_mode;   /* inode protection mode */
 
 140     nlink_t  st_nlink;  /* number or hard links to the file */
 
 141     uid_t    st_uid;    /* user-id of owner */
 
 142     gid_t    st_gid;    /* group-id of owner */
 
 143     dev_t    st_rdev;   /* device type, for special file inode */
 
 144     struct timespec st_atimespec;  /* time of last access */
 
 145     struct timespec st_mtimespec;  /* time of last data modification */
 
 146     struct timespec st_ctimespec;  /* time of last file status change */
 
 147     off_t    st_size;   /* file size, in bytes */
 
 148     quad_t   st_blocks; /* blocks allocated for file */
 
 149     u_long   st_blksize;/* optimal file sys I/O ops blocksize */
 
 150     u_long   st_flags;  /* user defined flags for file */
 
 151     u_long   st_gen;    /* file generation number */
 
 155 However, when the macro
 
 156 .Dv _DARWIN_FEATURE_64_BIT_INODE
 
 159 type will be 64-bits (force 64-bit inode mode by defining the
 
 160 .Dv _DARWIN_USE_64_BIT_INODE
 
 161 macro before including header files).
 
 162 This will cause symbol variants of the
 
 166 suffixes, to be automatically linked in.
 
 169 structure will now be defined as:
 
 171 struct stat { /* when _DARWIN_FEATURE_64_BIT_INODE is defined */
 
 172     dev_t           st_dev;           /* ID of device containing file */
 
 173     mode_t          st_mode;          /* Mode of file (see below) */
 
 174     nlink_t         st_nlink;         /* Number of hard links */
 
 175     ino_t           st_ino;           /* File serial number */
 
 176     uid_t           st_uid;           /* User ID of the file */
 
 177     gid_t           st_gid;           /* Group ID of the file */
 
 178     dev_t           st_rdev;          /* Device ID */
 
 179     struct timespec st_atimespec;     /* time of last access */
 
 180     struct timespec st_mtimespec;     /* time of last data modification */
 
 181     struct timespec st_ctimespec;     /* time of last status change */
 
 182     struct timespec st_birthtimespec; /* time of file creation(birth) */
 
 183     off_t           st_size;          /* file size, in bytes */
 
 184     blkcnt_t        st_blocks;        /* blocks allocated for file */
 
 185     blksize_t       st_blksize;       /* optimal blocksize for I/O */
 
 186     uint32_t        st_flags;         /* user defined flags for file */
 
 187     uint32_t        st_gen;           /* file generation number */
 
 188     int32_t         st_lspare;        /* RESERVED: DO NOT USE! */
 
 189     int64_t         st_qspare[2];     /* RESERVED: DO NOT USE! */
 
 193 The time-related fields of
 
 196 .Bl -tag -width XXXst_birthtime
 
 198 Time when file data last accessed.
 
 206 Time when file data last modified.
 
 214 Time when file status was last changed (inode data modification).
 
 227 Time of file creation. Only set once when the file is created. This field is 
 
 228 only available in the 64 bit inode variants. On filesystems where birthtime is 
 
 229 not available, this field holds the
 
 234 The size-related fields of the structures are as follows:
 
 235 .Bl -tag -width XXXst_blksize
 
 237 The optimal I/O block size for the file.
 
 239 The actual number of blocks allocated for the file in 512-byte units.
 
 240 As short symbolic links are stored in the inode, this number may
 
 244 The status information word
 
 246 has the following bits:
 
 248 #define S_IFMT 0170000           /* type of file */
 
 249 #define        S_IFIFO  0010000  /* named pipe (fifo) */
 
 250 #define        S_IFCHR  0020000  /* character special */
 
 251 #define        S_IFDIR  0040000  /* directory */
 
 252 #define        S_IFBLK  0060000  /* block special */
 
 253 #define        S_IFREG  0100000  /* regular */
 
 254 #define        S_IFLNK  0120000  /* symbolic link */
 
 255 #define        S_IFSOCK 0140000  /* socket */
 
 256 #define        S_IFWHT  0160000  /* whiteout */
 
 257 #define S_ISUID 0004000  /* set user id on execution */
 
 258 #define S_ISGID 0002000  /* set group id on execution */
 
 259 #define S_ISVTX 0001000  /* save swapped text even after use */
 
 260 #define S_IRUSR 0000400  /* read permission, owner */
 
 261 #define S_IWUSR 0000200  /* write permission, owner */
 
 262 #define S_IXUSR 0000100  /* execute/search permission, owner */
 
 265 For a list of access modes, see
 
 271 For a list of the file flags in the
 
 278 Upon successful completion a value of 0 is returned.
 
 279 Otherwise, a value of -1 is returned and
 
 281 is set to indicate the error.
 
 283 Previous versions of the system used different types for the
 
 297 system call will fail if:
 
 301 is not a valid open file descriptor.
 
 305 points to an invalid address.
 
 308 An I/O error occurs while reading from or writing to the file system.
 
 315 system calls will fail if:
 
 319 Search permission is denied for a component of the path prefix.
 
 325 points to an invalid address.
 
 328 An I/O error occurs while reading from or writing to the file system.
 
 331 Too many symbolic links are encountered in translating the pathname.
 
 332 This is taken to be indicative of a looping symbolic link.
 
 334 .It Bq Er ENAMETOOLONG
 
 335 A component of a pathname exceeds
 
 337 characters, or an entire path name exceeds
 
 342 The named file does not exist.
 
 345 A component of the path prefix is not a directory.
 
 353 system calls will fail if:
 
 357 The file size in bytes 
 
 358 or the number of blocks allocated to the file
 
 359 or the file serial number cannot be represented correctly
 
 360 in the structure pointed to by
 
 364 The file generation number,
 
 366 is only available to the super-user.
 
 368 The fields in the stat structure currently marked
 
 373 are present in preparation for inode time stamps expanding
 
 374 to 64 bits.  This, however, can break certain programs that
 
 375 depend on the time stamps being contiguous (in calls to
 
 377 .Sh TRANSITIONAL DESCRIPTION (NOW DEPRECATED)
 
 383 routines are equivalent to their corresponding non-64-suffixed routine,
 
 384 when 64-bit inodes are in effect.
 
 385 They were added before there was support for the symbol variants, and so are
 
 387 Instead of using these, set the
 
 388 .Dv _DARWIN_USE_64_BIT_INODE
 
 389 macro before including header files to force 64-bit inode support.
 
 393 structure used by these deprecated routines is the same as the
 
 395 structure when 64-bit inodes are in effect (see above).
 
 406 to a socket (and thus to a pipe)
 
 407 returns a zero'd buffer,
 
 408 except for the blocksize field,
 
 409 and a unique device and inode number.
 
 415 function calls are expected to conform to 
 
 420 function call appeared in
 
 427 system calls first appeared in Mac OS X 10.5 (Leopard) and are now deprecated
 
 428 in favor of the corresponding symbol variants.