- file_name
- Documentation for this section has not yet been entered.
- buf
- Documentation for this section has not yet been entered.
On success, 0 is returned. On error, -1 is returned and Stdlib.GetLastError returns the translated error.
Usage
The stat() and lstat() system calls will fail if:
Error Details Errno.EACCES Search permission is denied for a component of the path prefix.
Errno.EFAULT The sb or path argument points to an invalid address.
Errno.EIO An I/O error occurred while reading from or writing to the file system.
Errno.ELOOP Too many symbolic links were encountered in translating the pathname.
Errno.ENAMETOOLONG A component of a pathname exceeded 255 characters, or an entire path name exceeded 1023 characters.
Errno.ENOENT The named file does not exist.
Errno.ENOTDIR A component of the path prefix is not a directory.
Errno.EOVERFLOW The file size in bytes cannot be represented correctly in the structure pointed to by sb .
The stat() system call obtains information about the file pointed to by path . Read, write or execute permission of the named file is not required, but all directories listed in the path name leading to the file must be searchable.
The sb argument is a pointer to a Vt stat structure as defined by sys/stat.h and into which information is placed concerning the file.
The fields of Vt "struct stat" related to the file system are as follows:
st_dev |
The numeric ID of the device containing the file. |
st_ino |
The file's inode number. |
st_nlink |
The number of hard links to the file. |
The st_dev and st_ino fields together identify the file uniquely within the system.
The time-related fields of Vt "struct stat" are as follows:
st_atime |
Time when file data last accessed. Changed by the Syscall.mknod(2) , Syscall.utimes(2) , Syscall.read(2) and Syscall.readv(2) system calls. |
st_mtime |
Time when file data last modified. Changed by the Syscall.mkdir(2) , Syscall.mkfifo(2) , Syscall.mknod(2) , Syscall.utimes(2) , Syscall.write(2) and Syscall.writev(2) system calls. |
st_ctime |
Time when file status was last changed (inode data modification). Changed by the Syscall.chflags(2) , Syscall.chmod(2) , Syscall.chown(2) , Syscall.creat(2) , Syscall.link(2) , Syscall.mkdir(2) , Syscall.mkfifo(2) , Syscall.mknod(2) , Syscall.rename(2) , Syscall.rmdir(2) , Syscall.symlink(2) , Syscall.truncate(2) , Syscall.unlink(2) , Syscall.utimes(2) , Syscall.write(2) and Syscall.writev(2) system calls. |
st_birthtime |
Time when the inode was created. |
If _POSIX_SOURCE is not defined, the time-related fields are defined as:
#ifndef _POSIX_SOURCE
#define st_atime st_atimespec.tv_sec
#define st_mtime st_mtimespec.tv_sec
#define st_ctime st_ctimespec.tv_sec
#endif
The size-related fields of the Vt "struct stat" are as follows:
st_size |
The file size in bytes. |
st_blksize |
The optimal I/O block size for the file. |
st_blocks |
The actual number of blocks allocated for the file in 512-byte units. As short symbolic links are stored in the inode, this number may be zero. |
The access-related fields of Vt "struct stat" are as follows:
st_uid |
The user ID of the file's owner. |
st_gid |
The group ID of the file. |
st_mode |
Status of the file (see below). |
The status information word st_mode has the following bits:
#define S_IFMT 0170000 /* type of file */
#define S_IFIFO 0010000 /* named pipe (fifo) */
#define S_IFCHR 0020000 /* character special */
#define S_IFDIR 0040000 /* directory */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0100000 /* regular */
#define S_IFLNK 0120000 /* symbolic link */
#define S_IFSOCK 0140000 /* socket */
#define S_IFWHT 0160000 /* whiteout */
#define S_ISUID 0004000 /* set user id on execution */
#define S_ISGID 0002000 /* set group id on execution */
#define S_ISVTX 0001000 /* save swapped text even after use */
#define S_IRUSR 0000400 /* read permission, owner */
#define S_IWUSR 0000200 /* write permission, owner */
#define S_IXUSR 0000100 /* execute/search permission, owner */
For a list of access modes, see sys/stat.h , Syscall.access(2) and Syscall.chmod(2) . The following macros are available to test whether a st_mode value passed in the m argument corresponds to a file of the specified type:
S_ISBLK()m |
Test for a block special file. |
S_ISCHR()m |
Test for a character special file. |
S_ISDIR()m |
Test for a directory. |
S_ISFIFO()m |
Test for a pipe or FIFO special file. |
S_ISLNK()m |
Test for a symbolic link. |
S_ISREG()m |
Test for a regular file. |
S_ISSOCK()m |
Test for a socket. |
S_ISWHT()m |
Test for a whiteout. |
The macros evaluate to a non-zero value if the test is true or to the value 0 if the test is false.