Unix/Linux系統調用
accept()函數 Unix/Linux
access()函數 Unix/Linux
acct()函數 Unix/Linux
add_key()函數 Unix/Linux
adjtimex()函數 Unix/Linux
afs_syscall()函數 Unix/Linux
alarm()函數 Unix/Linux
alloc_hugepages()函數 Unix/Linux
arch_prctl()函數 Unix/Linux
bdflush()函數 Unix/Linux
bind()函數 Unix/Linux
break未實現 Unix/Linux
brk()函數 Unix/Linux
cacheflush()函數 Unix/Linux
chdir()函數 Unix/Linux
chmod()函數 Unix/Linux
chown()函數 Unix/Linux
chroot()函數 Unix/Linux
clone()函數 Unix/Linux
close()函數 Unix/Linux
connect()函數 Unix/Linux
create_module()函數 Unix/Linux
open()函數 Unix/Linux
dup2()函數 Unix/Linux
dup()函數 Unix/Linux
epoll_create()函數 Unix/Linux
epoll_ctl()函數 Unix/Linux
epoll_wait()函數 Unix/Linux
execve()函數 Unix/Linux
exit_group函數 Unix/Linux
_exit()函數 Unix/Linux
exit()函數 Unix/Linux
faccessat()函數 Unix/Linux
fattach()函數 Unix/Linux
fchdir()函數 Unix/Linux
fchmodat()函數 Unix/Linux
fchmod()函數 Unix/Linux
fchownat()函數 Unix/Linux
fchown()函數 Unix/Linux
fcntl()函數 Unix/Linux
fdatasync()函數 Unix/Linux
fdetach()函數 Unix/Linux
flock()函數 Unix/Linux
fork()函數 Unix/Linux
alloc_hugepages()函數 Unix/Linux
fstatat()函數 Unix/Linux
statfs()函數 Unix/Linux
stat()函數 Unix/Linux
statvfs()函數 Unix/Linux
fsync()函數 Unix/Linux
truncate()函數 Unix/Linux
futex()函數 Unix/Linux
futimesat()函數 Unix/Linux
getcontext()函數 Unix/Linux
getcwd()函數 Unix/Linux
getdents()函數 Unix/Linux
getdomainname()函數 Unix/Linux
getdtablesize()函數 Unix/Linux
getgid()函數 Unix/Linux
getuid()函數 Unix/Linux
getgroups()函數 Unix/Linux
getgroups()函數 Unix/Linux
gethostname()函數 Unix/Linux
getitimer()函數 Unix/Linux
get_kernel_syms()函數 Unix/Linux
unimplemented()函數 Unix/Linux
getpagesize()函數 Unix/Linux
getpeername()函數 Unix/Linux
setpgid()函數 Unix/Linux
getpgrp()函數 Unix/Linux
getpid()函數 Unix/Linux
getpmsg()函數 Unix/Linux
getppid()函數 Unix/Linux
getpriority()函數 Unix/Linux
getresuid()函數 Unix/Linux
getrlimit()函數 Unix/Linux
get_robust_list()函數 Unix/Linux
getrusage()函數 Unix/Linux
getsid()函數 Unix/Linux
getsockname()函數 Unix/Linux
getsockopt()函數 Unix/Linux
get_thread_area()函數 Unix/Linux
gettid()函數 Unix/Linux
gettimeofday()函數 Unix/Linux
getuid()函數 Unix/Linux
getunwind()函數 Unix/Linux
gtty()函數 Unix/Linux
idle()函數 Unix/Linux
outb()函數 Unix/Linux
inb_p()函數 Unix/Linux
inl()函數 Unix/Linux
inl_p()函數 Unix/Linux
inotify_add_watch()函數 Unix/Linux
inotify_init()函數 Unix/Linux
inotify_rm_watch()函數 Unix/Linux
outb()函數 Unix/Linux
insl()函數 Unix/Linux
insw()函數 Unix/Linux
intro()函數 Unix/Linux
inw()函數 Unix/Linux
inw_p()函數 Unix/Linux
io_cancel()函數 Unix/Linux
ioctl()函數 Unix/Linux
ioctl_list()函數 Unix/Linux
io_destroy()函數 Unix/Linux
io_getevents()函數 Unix/Linux
ioperm()函數 Unix/Linux
iopl()函數 Unix/Linux
ioprio_set()函數 Unix/Linux
io_setup()函數 Unix/Linux
io_submit()函數 Unix/Linux
ipc()函數 Unix/Linux
isastream()函數 Unix/Linux
kexec_load()函數 Unix/Linux
keyctl()函數 Unix/Linux
kill()函數 Unix/Linux
killpg()函數 Unix/Linux
lchown()函數 Unix/Linux
linkat()函數 Unix/Linux
link()函數 Unix/Linux
listen()函數 Unix/Linux
_llseek()函數 Unix/Linux
llseek()函數 Unix/Linux
lock()函數 Unix/Linux
lookup_dcookie()函數 Unix/Linux
lseek()函數 Unix/Linux
lstat()函數 Unix/Linux
madvise()函數 Unix/Linux
mincore()函數 Unix/Linux
mkdirat()函數 Unix/Linux
mkdir()函數 Unix/Linux
mknod()函數 Unix/Linux
mlockall()函數 Unix/Linux
mlock()函數 Unix/Linux
mmap2()函數 Unix/Linux
mmap()函數 Unix/Linux
modify_ldt()函數 Unix/Linux
mount()函數 Unix/Linux
move_pages()函數 Unix/Linux
mprotect()函數 Unix/Linux
mpx()函數 Unix/Linux
mq_getsetattr()函數 Unix/Linux
mremap()函數 Unix/Linux
msgctl()函數 Unix/Linux
msgget()函數 Unix/Linux
msgop()函數 Unix/Linux
msgsnd()函數 Unix/Linux
msync()函數 Unix/Linux
multiplexer()函數 Unix/Linux
munlockall()函數 Unix/Linux
munlock()函數 Unix/Linux
munmap()函數 Unix/Linux
nanosleep()函數 Unix/Linux
_newselect()函數 Unix/Linux
nfsservctl()函數 Unix/Linux
nice()函數 Unix/Linux
obsolete()函數 Unix/Linux
oldfstat()函數 Unix/Linux
oldlstat()函數 Unix/Linux
oldolduname()函數 Unix/Linux
oldstat()函數 Unix/Linux
olduname()函數 Unix/Linux
openat()函數 Unix/Linux
open()函數 Unix/Linux
outb()函數 Unix/Linux
outb_p()函數 Unix/Linux
outsb()函數 Unix/Linux
outsl()函數 Unix/Linux
outsw()函數 Unix/Linux
outw()函數 Unix/Linux
outw_p()函數 Unix/Linux
path_resolution()函數 Unix/Linux
pause()函數 Unix/Linux
perfmonctl()函數 Unix/Linux
personality()函數 Unix/Linux
pipe()函數 Unix/Linux
pivot_root()函數 Unix/Linux
poll()函數 Unix/Linux
posix_fadvise()函數 Unix/Linux
ppoll()函數 Unix/Linux
prctl()函數 Unix/Linux
pread()函數 Unix/Linux
prof()函數 Unix/Linux
pselect()函數 Unix/Linux
ptrace()函數 Unix/Linux
putmsg()函數 Unix/Linux
putpmsg()函數 Unix/Linux
pwrite()函數 Unix/Linux
query_module()函數 Unix/Linux
quotactl()函數 Unix/Linux
readahead()函數 Unix/Linux
readdir()函數 Unix/Linux
read()函數 Unix/Linux
readlinkat()函數 Unix/Linux
readlink()函數 Unix/Linux
readv()函數 Unix/Linux
reboot()函數 Unix/Linux
recvfrom()函數 Unix/Linux
recv()函數 Unix/Linux
recvmsg()函數 Unix/Linux
remap_file_pages()函數 Unix/Linux
renameat()函數 Unix/Linux
rename()函數 Unix/Linux
request_key()函數 Unix/Linux
rmdir()函數 Unix/Linux
sbrk()函數 Unix/Linux
sched_setaffinity()函數 Unix/Linux
sched_getparam()函數 Unix/Linux
sched_get_priority_max()函數 Unix/Linux
sched_get_priority_min()函數 Unix/Linux
sched_setscheduler()函數 Unix/Linux
sched_rr_get_interval()函數 Unix/Linux
sched_setparam()函數 Unix/Linux
sched_yield()函數 Unix/Linux
security()函數 Unix/Linux
select()函數 Unix/Linux
select_tut()函數 Unix/Linux
semctl()函數 Unix/Linux

lstat()函數 Unix/Linux

stat, fstat, lstat - 獲取文件狀態

內容簡介

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char **path*, struct stat **buf*); 
int fstat(int filedes**, struct stat *buf);** 
int lstat(const char **path*, struct stat **buf*);

描述

These functions return information about a file. No permissions are required on the file itself, but — in the case of stat() and lstat() — execute (search) permission is required on all of the directories in path that lead to the file.

stat() stats the file pointed to by path and fills in buf.

lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to.

fstat() is identical to stat(), except that the file to be stat-ed is specified by the file descriptor filedes.

All of these system calls return a stat structure, which contains the following fields:

struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};

The st_dev field describes the device on which this file resides.

The st_rdev field describes the device that this file (inode) represents.

The st_size field gives the size of the file (if it is a regular file or a symbolic link) in bytes. The size of a symlink is the length of the pathname it contains, without a trailing null byte.

The st_blocks field indicates the number of blocks allocated to the file, 512-byte units. (This may be smaller than st_size/512, for example, when the file has holes.)

The st_blksize field gives the "preferred" blocksize for efficient file system I/O. (Writing to a file in smaller chunks may cause an inefficient read-modify-rewrite.)

Not all of the Linux filesystems implement all of the time fields. Some file system types allow mounting in such a way that file accesses do not cause an update of the st_atimefield. (See ‘noatime’ in mount(8).)

The field st_atime is changed by file accesses, e.g. by execve(2), mknod(2), pipe(2),utime(2) and read(2) (of more than zero bytes). Other routines, like mmap(2), may or may not update st_atime.

The field st_mtime is changed by file modifications, e.g. by mknod(2), truncate(2),utime(2) and write(2) (of more than zero bytes). Moreover, st_mtime of a directory is changed by the creation or deletion of files in that directory. The st_mtime field is notchanged for changes in owner, group, hard link count, or mode.

The field st_ctime is changed by writing or by setting inode information (i.e., owner, group, link count, mode, etc.).

The following POSIX macros are defined to check the file type using the st_mode field:

標籤

描述

S_ISREG(m)

is it a regular file?

S_ISDIR(m)

directory?

S_ISCHR(m)

character device?

S_ISBLK(m)

block device?

S_ISFIFO(m)

FIFO (named pipe)?

S_ISLNK(m)

symbolic link? (Not in POSIX.1-1996.)

S_ISSOCK(m)

socket? (Not in POSIX.1-1996.)

The following flags are defined for the st_mode field:

S_IFMT

0170000

bitmask for the file type bitfields

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.

LINUX 注意

Since kernel 2.5.48, the  stat  structure supports nanosecond resolution for the three file timestamp fields. Glibc exposes the nanosecond component of each field using names either of the form  st_atim.tv_nsec , if the _BSD_SOURCE or _SVID_SOURCE feature test macro is defined, or of the form  st_atimensec , if neither of these macros is defined. On file systems that do not support sub-second timestamps, these nanosecond fields are returned with the value 0.

For most files under the /proc directory, stat() does not return the file size in the st_sizefield; instead the field is returned with the value 0.

返回值

On success, zero is returned. On error, -1 is returned, and  errno  is set appropriately.

錯誤

標籤

描述

EACCES

Search permission is denied for one of the directories in the path prefix of path. (See also path_resolution(2).)

EBADF

filedes is bad.

EFAULT

Bad address.

ELOOP

Too many symbolic links encountered while traversing the path.

ENAMETOOLONG

 

File name too long.

ENOENT

A component of the path path does not exist, or the path is an empty string.

ENOMEM

Out of memory (i.e. kernel memory).

ENOTDIR

 

A component of the path is not a directory.

遵循於

These system calls conform to SVr4, 4.3BSD, POSIX.1-2001.

Use of the st_blocks and st_blksize fields may be less portable. (They were introduced in BSD. The interpretation differs between systems, and possibly on a single system when NFS mounts are involved.)

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.

Unix V7 (and later systems) had S_IREAD, S_IWRITE, S_IEXEC, where POSIX prescribes the synonyms S_IRUSR, S_IWUSR, S_IXUSR.

其它系統

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.

另請參閱

  • access (2)

  • chmod (2)

  • chown (2)

  • fstatat (2)

  • readlink (2)

  • utime (2)