03-1-stat
03-1-stat
Jan Schaumann
[email protected]
https://stevens.netmeister.org/631/
CS631 - Advanced Programming in the UNIX Environment
stat(2)
#include <sys/stat.h>
#include <sys/stat.h>
#include <fcntl.h>
int fstatat(int fd, const char *path, struct stat *sb, int flag);
Returns: 0 if OK, -1 on error
All of these obtain information about the file pointed to by path (or, in the case of
fstat(2), fd). If path is a symlink, lstat(2) returns information about the link itself.
2
Jan Schaumann 2020-09-10
CS631 - Advanced Programming in the UNIX Environment
struct stat
struct stat {
dev_t st_dev; /* device number (filesystem) */
ino_t st_ino; /* i-node number (serial number) */
mod_t st_mode; /* file type & mode (permissions) */
dev_t st_rdev; /* device number for special files */
nlink_t st_nlink; /* number of links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
off_t st_size; /* size in bytes, for regular files */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last file status change */
long st_blocks; /* number of 512-byte blocks allocated */
long st_blksize; /* optimal I/O block size */
}
stat(2)
4
Jan Schaumann 2020-09-10
CS631 - Advanced Programming in the UNIX Environment
stat(2)
$ ls -l file
-rw-r--r-- 1 jschauma wheel 1048576 Sep 10 20:04 file
5
Jan Schaumann 2020-09-10
CS631 - Advanced Programming in the UNIX Environment
stat(2)
The stat(1) utility displays information about the file pointed to by file.
$ stat -r file
16 3 0100644 1 1000 0 -1 1048576 1599768274 1599768274 1599768274 0 4096 2056 0 file
The default format displays the st_dev, st_ino, st_mode, st_nlink, st_uid,
st_gid, st_rdev, st_size, st_atime, st_mtime, st_ctime, st_birthtime,
st_blksize, st_blocks, and st_flags fields, in that order.
6
Jan Schaumann 2020-09-10
CS631 - Advanced Programming in the UNIX Environment
The st_mode field of the struct stat encodes the type of file:
• regular – most common, interpretation of data is up to application
• directory – contains names of other files and pointer to information on those files
• character special – used for certain types of devices, e.g., terminal
• block special – used for disk devices (typically)
• FIFO – used for interprocess communication (sometimes called a "named pipe")
• socket – used for network communication and non-network communication (same
host)
• symbolic link – points to another file
7
Jan Schaumann 2020-09-10
CS631 - Advanced Programming in the UNIX Environment
8
Jan Schaumann 2020-09-10
CS631 - Advanced Programming in the UNIX Environment
9
Jan Schaumann 2020-09-10
CS631 - Advanced Programming in the UNIX Environment
struct stat
We've seen how ls(1) can display most of the information from the struct stat.
stat(1) gets us the rest in a more flexible way.
We've revisited the st_blocks and st_blksize members from our discussion on I/O
efficiency.
We improved our simple-ls clone to display the type of file via the st_mode for files and
symlinks.
10
Jan Schaumann 2020-09-10