- Devt stdev. Identifies the device containing the file. The stino and stdev, taken together, uniquely identify the file. The stdev value is not necessarily consistent across reboots or system crashes, however. Nlinkt stnlink. The number of hard links to the file. This count keeps track of how many directories have entries for this file.
- C Programming POSIX Reference Jump to navigation Jump to search is the header in the C POSIX library for the C programming language that contains constructs that facilitate getting information about files attributes.
< C Programming | POSIX Reference
You need to say e.g. Buf.stdev when printing, since stdev is a field in the struct variable. Since buf is a local variable on the stack, you're not 'saving the values to memory' permanently, it's just as long as that variable is in-scope. This is how you return multiple values, typically, in C and C.
<sys/stat.h> is the header in the C POSIX library for the C programming language that contains constructs that facilitate getting information about files attributes.
Member functions[edit]
Name | Notes |
---|---|
int stat (const char *filename, struct stat *buf) | The stat function returns information about the attributes of the file named by filename in the structure pointed to by buf . If filename is the name of a symbolic link, the attributes you get describe the file that the link points to. If the link points to a nonexistent file name, then stat fails reporting a nonexistent file. The return value is 0 if the operation is successful, or -1 on failure. When the sources are compiled with _FILE_OFFSET_BITS 64 this function is in fact stat64 since the LFS interface transparently replaces the normal implementation.errno Errors: ENOENT means the file named by filename doesn't exist. |
int stat64 (const char *filename, struct stat64 *buf) | This function is similar to stat but it is also able to work on files larger than 2^31 bytes on 32-bit systems. To be able to do this the result is stored in a variable of type struct stat64 to which buf must point. When the sources are compiled with _FILE_OFFSET_BITS 64 this function is available under the name stat and so transparently replaces the interface for small files on 32-bit machines.errno Errors: ENOENT means the file named by filename doesn't exist. |
int fstat (int filedes, struct stat *buf) | The fstat function is like stat, except that it takes an open file descriptor (filedes )as an argument instead of a file name. Like stat, fstat returns 0 on success and -1 on failure. When the sources are compiled with _FILE_OFFSET_BITS 64 this function is in fact fstat64 since the LFS interface transparently replaces the normal implementation.errno Errors: EBADF means the filedes argument is nos a valid file descriptor. |
int fstat64 (int filedes, struct stat64 *buf) | This function is similar to fstat but is able to work on large files on 32-bit platforms. For large files the file descriptor filedes should be obtained by open64 or creat64. The buf pointer points to a variable of type struct stat64 which is able to represent the larger values. When the sources are compiled with _FILE_OFFSET_BITS 64 this function is available under the name fstat and so transparently replaces the interface for small files on 32-bit machines.errno Errors: EBADF means the filedes argument is nos a valid file descriptor. |
int lstat (const char *filename, struct stat *buf) | The lstat function is like stat, except that it does not follow symbolic links. If filename is the name of a symbolic link, lstat returns information about the link itself; otherwise lstat works like stat. See Symbolic Links. When the sources are compiled with _FILE_OFFSET_BITS 64 this function is in fact lstat64 since the LFS interface transparently replaces the normal implementation. |
int lstat64 (const char *filename, struct stat64 *buf) | The lstat function is like stat, except that it does not follow symbolic links. If filename is the name of a symbolic link, lstat returns information about the link itself; otherwise lstat works like stat. See Symbolic Links. When the sources are compiled with _FILE_OFFSET_BITS 64 this function is in fact lstat64 since the LFS interface transparently replaces the normal implementation. |
Member constants[edit]
The following POSIX macros are defined to check the file type using the
st_mode
field:Name | Notes |
---|---|
S_ISREG(m) | is it a regular file? |
S_ISDIR(m) | is it a directory? |
S_ISCHR(m) | is it a character device? |
S_ISBLK(m) | is it a block device? |
S_ISFIFO(m) | is it a FIFO (named pipe)? |
S_ISLNK(m) | is it a symbolic link? (Not in POSIX.1-1996.) |
S_ISSOCK(m) | is it a socket? (Not in POSIX.1-1996.) |
The following flags are defined for the
st_mode
field:Name | Value | Notes |
---|---|---|
S_IFMT | 0170000 | bit mask for the file type bit fields |
S_IFSOCK | 0140000 | socket |
S_IFLNK | 0120000 | symbolic link |
S_IFREG | 0100000 | regular file |
S_IFBLK | 0060000 | block device |
S_IFDIR | 0040000 | directory |
S_IFCHR | 0020000 | character device |
S_IFIFO | 0010000 | FIFO |
S_ISUID | 0004000 | set UID bit |
S_ISGID | 0002000 | set-group-ID bit (see below) |
S_ISVTX | 0001000 | sticky bit (see below) |
S_IRWXU | 00700 | mask for file owner permissions |
S_IRUSR | 00400 | owner has read permission |
S_IWUSR | 00200 | owner has write permission |
S_IXUSR | 00100 | owner has execute permission |
S_IRWXG | 00070 | mask for group permissions |
S_IRGRP | 00040 | group has read permission |
S_IWGRP | 00020 | group has write permission |
S_IXGRP | 00010 | group has execute permission |
S_IRWXO | 00007 | mask for permissions for others (not in group) |
S_IROTH | 00004 | others have read permission |
S_IWOTH | 00002 | others have write permission |
S_IXOTH | 00001 | others have execute permission |
The set-group-ID bit
(S_ISGID)
has several special uses. For a directory it indicates that BSD semantics is to be used for that directory: files created there inherit their group ID from the directory, not from the effective group ID of the creating process, and directories created there will also get the S_ISGID
bit set. For a file that does not have the group execution bit (S_IXGRP)
set, the set-group-ID bit indicates mandatory file/record locking. The sticky bit (S_ISVTX)
on a directory means that a file in that directory can be renamed or deleted only by the owner of the file, by the owner of the directory, and by a privileged process.POSIX does not describe the
S_IFMT
, S_IFSOCK
, S_IFLNK
, S_IFREG
, S_IFBLK
, S_IFDIR
, S_IFCHR
, S_IFIFO
, S_ISVTX
bits, but instead demands the use of the macros S_ISDIR()
, etc. The S_ISLNK()
and S_ISSOCK()
macros are not in POSIX.1-1996, but both are present in POSIX.1-2001; the former is from SVID 4, the latter from SUSv2.Other Systems - Values that have been (or are) in use on various systems:
hex | name | ls | octal | description |
---|---|---|---|---|
f000 | S_IFMT | 170000 | mask for file type | |
0000 | 000000 | SCO out-of-service inode; BSD unknown type; SVID-v2 and XPG2 have both 0 and 0100000 for ordinary file | ||
1000 | S_IFIFO | p| | 010000 | FIFO (named pipe) |
2000 | S_IFCHR | c | 020000 | character special (V7) |
3000 | S_IFMPC | 030000 | multiplexed character special (V7) | |
4000 | S_IFDIR | d/ | 040000 | directory (V7) |
5000 | S_IFNAM | 050000 | XENIX named special file with two subtypes, distinguished by st_rdev values 1, 2 | |
0001 | S_INSEM | s | 000001 | XENIX semaphore subtype of IFNAM |
0002 | S_INSHD | m | 000002 | XENIX shared data subtype of IFNAM |
6000 | S_IFBLK | b | 060000 | block special (V7) |
7000 | S_IFMPB | 070000 | multiplexed block special (V7) | |
8000 | S_IFREG | - | 100000 | regular (V7) |
9000 | S_IFCMP | 110000 | VxFS compressed | |
9000 | S_IFNWK | n | 110000 | network special (HP-UX) |
a000 | S_IFLNK | l@ | 120000 | symbolic link (BSD) |
b000 | S_IFSHAD | 130000 | Solaris shadow inode for ACL (not seen by userspace) | |
c000 | S_IFSOCK | s= | 140000 | socket (BSD; also 'S_IFSOC' on VxFS) |
d000 | S_IFDOOR | D> | 150000 | Solaris door |
e000 | S_IFWHT | w% | 160000 | BSD whiteout (not used for inode) |
0200 | S_ISVTX | 001000 | sticky bit: save swapped text even after use (V7) reserved (SVID-v2). On non-directories: don’t cache this file (SunOS). On directories: restricted deletion flag (SVID-v4.2) | |
0400 | S_ISGID | 002000 | set-group-ID on execution (V7) for directories: use BSD semantics for propagation of GID | |
0400 | S_ENFMT | 002000 | SysV file locking enforcement (shared with S_ISGID) | |
0800 | S_ISUID | 004000 | set-user-ID on execution (V7) | |
0800 | S_CDF | 004000 | directory is a context dependent file (HP-UX) |
A sticky command appeared in Version 32V AT&T UNIX.
Member types[edit]
Data types defined in the
<sys/stat.h>
header include:Example[edit]
A short example of <sys/stat.h> usage is:
Put the source in a file (main.c) and compile this:
Now, to run type:
References[edit]
Retrieved from 'https://en.wikibooks.org/w/index.php?title=C_Programming/POSIX_Reference/sys/stat.h&oldid=3677772'
Next: Reading Attributes, Up: File Attributes [Contents][Index]
14.9.1 The meaning of the File Attributes
When you read the attributes of a file, they come back in a structurecalled
struct stat
. This section describes the names of theattributes, their data types, and what they mean. For the functionsto read the attributes of a file, see Reading Attributes.The header file sys/stat.h declares all the symbols definedin this section.
The
stat
structure type is used to return information about theattributes of a file. It contains at least the following members:mode_t st_mode
Specifies the mode of the file. This includes file type information(see Testing File Type) and the file permission bits(see Permission Bits).
ino_t st_ino
The file serial number, which distinguishes this file from all otherfiles on the same device.
dev_t st_dev
Identifies the device containing the file. The
st_ino
andst_dev
, taken together, uniquely identify the file. Thest_dev
value is not necessarily consistent across reboots orsystem crashes, however.nlink_t st_nlink
The number of hard links to the file. This count keeps track of howmany directories have entries for this file. If the count is everdecremented to zero, then the file itself is discarded as soon as noprocess still holds it open. Symbolic links are not counted in thetotal.
uid_t st_uid
The user ID of the file’s owner. See File Owner.
gid_t st_gid
The group ID of the file. See File Owner.
off_t st_size
This specifies the size of a regular file in bytes. For files that arereally devices this field isn’t usually meaningful. For symbolic linksthis specifies the length of the file name the link refers to.
time_t st_atime
This is the last access time for the file. See File Times.
unsigned long int st_atime_usec
This is the fractional part of the last access time for the file.See File Times.
time_t st_mtime
This is the time of the last modification to the contents of the file.See File Times.
unsigned long int st_mtime_usec
This is the fractional part of the time of the last modification to thecontents of the file. See File Times.
time_t st_ctime
This is the time of the last modification to the attributes of the file.See File Times.
unsigned long int st_ctime_usec
This is the fractional part of the time of the last modification to theattributes of the file. See File Times.
blkcnt_t st_blocks
This is the amount of disk space that the file occupies, measured inunits of 512-byte blocks.
The number of disk blocks is not strictly proportional to the size ofthe file, for two reasons: the file system may use some blocks forinternal record keeping; and the file may be sparse—it may have“holes” which contain zeros but do not actually take up space on thedisk.
You can tell (approximately) whether a file is sparse by comparing thisvalue with
st_size
, like this:This test is not perfect because a file that is just slightly sparsemight not be detected as sparse at all. For practical applications,this is not a problem.
unsigned int st_blksize
The optimal block size for reading or writing this file, in bytes. Youmight use this size for allocating the buffer space for reading orwriting the file. (This is unrelated to
st_blocks
.)The extensions for the Large File Support (LFS) require, even on 32-bitmachines, types which can handle file sizes up to 2^63.Therefore a new definition of
struct stat
is necessary.The members of this type are the same and have the same names as thosein
struct stat
. The only difference is that the membersst_ino
, st_size
, and st_blocks
have a differenttype to support larger values.mode_t st_mode
Specifies the mode of the file. This includes file type information(see Testing File Type) and the file permission bits(see Permission Bits).
ino64_t st_ino
The file serial number, which distinguishes this file from all otherfiles on the same device.
dev_t st_dev
Identifies the device containing the file. The
st_ino
andst_dev
, taken together, uniquely identify the file. Thest_dev
value is not necessarily consistent across reboots orsystem crashes, however.nlink_t st_nlink
The number of hard links to the file. This count keeps track of howmany directories have entries for this file. If the count is everdecremented to zero, then the file itself is discarded as soon as noprocess still holds it open. Symbolic links are not counted in thetotal.
uid_t st_uid
The user ID of the file’s owner. See File Owner.
gid_t st_gid
The group ID of the file. Auto repair shop tune-ups. Synth1 fl studio vst free download. See File Owner.
off64_t st_size
This specifies the size of a regular file in bytes. For files that arereally devices this field isn’t usually meaningful. For symbolic linksthis specifies the length of the file name the link refers to.
time_t st_atime
This is the last access time for the file. See File Times.
unsigned long int st_atime_usec
This is the fractional part of the last access time for the file.See File Times.
time_t st_mtime
This is the time of the last modification to the contents of the file.See File Times.
unsigned long int st_mtime_usec
This is the fractional part of the time of the last modification to thecontents of the file. See File Times.
time_t st_ctime
This is the time of the last modification to the attributes of the file.See File Times.
unsigned long int st_ctime_usec
This is the fractional part of the time of the last modification to theattributes of the file. See File Times.
blkcnt64_t st_blocks
This is the amount of disk space that the file occupies, measured inunits of 512-byte blocks.
unsigned int st_blksize
The optimal block size for reading of writing this file, in bytes. Youmight use this size for allocating the buffer space for reading ofwriting the file. (This is unrelated to
st_blocks
.)Some of the file attributes have special data type names which existspecifically for those attributes. (They are all aliases for well-knowninteger types that you know and love.) These typedef names are definedin the header file sys/types.h as well as in sys/stat.h.Here is a list of them.
This is an integer data type used to represent file modes. Inthe GNU C Library, this is an unsigned type no narrower than
unsignedint
.This is an unsigned integer type used to represent file serial numbers.(In Unix jargon, these are sometimes called inode numbers.)In the GNU C Library, this type is no narrower than
unsigned int
.If the source is compiled with
_FILE_OFFSET_BITS 64
this typeis transparently replaced by ino64_t
.What Is Stdev In Statistics
This is an unsigned integer type used to represent file serial numbersfor the use in LFS. In the GNU C Library, this type is no narrower than
unsigned int
.What Is St_dev In Cursive
When compiling with
_FILE_OFFSET_BITS 64
this type isavailable under the name ino_t
.This is an arithmetic data type used to represent file device numbers.In the GNU C Library, this is an integer type no narrower than
int
.What Is St_dev In Celsius
This is an integer type used to represent file link counts.
I7-7700k auto tune. This is a signed integer type used to represent block counts.In the GNU C Library, this type is no narrower than
int
.If the source is compiled with
_FILE_OFFSET_BITS 64
this typeis transparently replaced by blkcnt64_t
.This is a signed integer type used to represent block counts for theuse in LFS. In the GNU C Library, this type is no narrower than
int
.When compiling with
_FILE_OFFSET_BITS 64
this type isavailable under the name blkcnt_t
.Next: Reading Attributes, Up: File Attributes [Contents][Index]