赞
踩
NAME
stat 获取文件属性
这个函数位于头文件里
函数原型:
int stat(const char *path, struct stat *buf);
參数:
path 文件路径+文件名称
buf 指向buffer的指针
返回值:
-1 遇到错误
0 成功返回
函数作用:
把path文件的信息拷贝到指针buf所指的结构体中。
描写叙述
stat结构体:
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 512B 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 */
};
dev_t包括设备文件的ID
st_inoi结点
st_mode文件类型和许可权限
st_nline文件链接数
st_uid用户全部者的ID
st_gid所属组的ID
st_rdev设备ID(假设指定文件)
st_size 所占的字节数
st_blksize文件系统I/O块大小
st_block分配的512B大小的
st_atime最后訪问时间
st_mtime最后改动时间
st_ctime状态最后改变时间
以下的POSIX宏定义用于核对st_mode域的文件类型
S_ISREG(m) 是常规文件?
S_ISDIR(m) 文件夹?
S_ISCHR(m) 字符设备?
S_ISBLK(m) 块设备?
S_ISFIFO(m) FIFO?
S_ISLNK(m) 符号链接? (Not in POSIX.1-1996.)
S_ISSOCK(m) 套接字? (Not in POSIX.1-1996.)
以下的标志用于st_mode域:
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-user-ID 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
实例:
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
struct stat info;
if (argc != 2)
{
fprintf(stderr, "Usage: %s
", argv[0]);
exit(EXIT_FAILURE);
}
if (stat(argv[1], &info) == -1)
{
perror("stat");
exit(EXIT_FAILURE);
}
printf("File type; ");
switch(info.st_mode & S_IFMT)
{
case S_IFBLK: printf("block device
"); break;
case S_IFCHR: printf("character device
"); break;
case S_IFDIR: printf("directory
"); break;
case S_IFIFO: printf("FIFO pipe
"); break;
case S_IFLNK: printf("symlink
"); break;
case S_IFREG: printf("regular file
"); break;
case S_IFSOCK: printf("socket
"); break;
default: printf("unknown
"); break;
}
printf("I-node number: %ld
", (long)info.st_ino);
printf("Mode: %lo(octal)
",
(unsigned long)info.st_mode);
printf("Link count: %ld
", (long)info.st_nlink);
printf("Ownership: UID=%ld GID=%ld
",
(long)info.st_uid, (long)info.st_gid);
printf("Preferred I/O block size: %ld bytes
",
(long) info.st_blksize);
printf("File size: %lld bytes
",
(long long) info.st_size);
printf("Blocks allocated: %lld
",
(long long) info.st_blocks);
printf("Last status change: %s", ctime(&info.st_ctime));
printf("Last file access: %s", ctime(&info.st_atime));
printf("Last file modification: %s", ctime(&info.st_mtime));
exit(EXIT_SUCCESS);
}
执行结果:
liujl@liujl-ThinkPad-Edge-E431:~/linux_program/list$ ./stat stat.c
File type; regular file
I-node number: 679622
Mode: 100644(octal)
Link count: 1
Ownership: UID=1000 GID=1000
Preferred I/O block size: 4096 bytes
File size: 2102 bytes
Blocks allocated: 8
Last status change: Wed Jul 16 23:26:20 2014
Last file access: Wed Jul 16 23:26:35 2014
Last file modification: Wed Jul 16 23:26:20 2014
附录为/usr/include/sys/stat.h源代码:
/*-
* Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
*This product includes software developed by the University of
*California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*@(#)stat.h7.11 (Berkeley) 3/3/91
*/
struct stat
{
dev_tst_dev;/* inode's device */
ino_tst_ino;/* inode's number */
mode_tst_mode;/* inode protection mode */
nlink_tst_nlink;/* number of hard links */
uid_tst_uid;/* user ID of the file's owner */
gid_tst_gid;/* group ID of the file's group */
dev_tst_rdev;/* device type */
off_tst_size;/* file size, in bytes */
time_tst_atime;/* time of last access */
longst_spare1;
time_tst_mtime;/* time of last data modification */
longst_spare2;
time_tst_ctime;/* time of last file status change */
longst_spare3;
longst_blksize;/* optimal blocksize for I/O */
longst_blocks;/* blocks allocated for file */
u_longst_flags;/* user defined flags for file */
u_longst_gen;/* file generation number */
};
#defineS_ISUID0004000/* set user id on execution */
#defineS_ISGID0002000/* set group id on execution */
#ifndef _POSIX_SOURCE
#defineS_ISTXT0001000/* sticky bit */
#endif
#defineS_IRWXU0000700/* RWX mask for owner */
#defineS_IRUSR0000400/* R for owner */
#defineS_IWUSR0000200/* W for owner */
#defineS_IXUSR0000100/* X for owner */
#ifndef _POSIX_SOURCE
#defineS_IREADS_IRUSR
#defineS_IWRITES_IWUSR
#defineS_IEXECS_IXUSR
#endif
#defineS_IRWXG0000070/* RWX mask for group */
#defineS_IRGRP0000040/* R for group */
#defineS_IWGRP0000020/* W for group */
#defineS_IXGRP0000010/* X for group */
#defineS_IRWXO0000007/* RWX mask for other */
#defineS_IROTH0000004/* R for other */
#defineS_IWOTH0000002/* W for other */
#defineS_IXOTH0000001/* X for other */
#ifndef _POSIX_SOURCE
#defineS_IFMT 0170000/* type of file */
#defineS_IFIFO 0010000/* named pipe (fifo) */
#defineS_IFCHR 0020000/* character special */
#defineS_IFDIR 0040000/* directory */
#defineS_IFBLK 0060000/* block special */
#defineS_IFREG 0100000/* regular */
#defineS_IFLNK 0120000/* symbolic link */
#defineS_IFSOCK 0140000/* socket */
#defineS_ISVTX 0001000/* save swapped text even after use */
#define S_BLKSIZE512/* block size used in the stat struct */
/* 0666 */
#defineDEFFILEMODE(S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
#endif
#defineS_ISDIR(m)((m & 0170000) == 0040000)/* directory */
#defineS_ISCHR(m)((m & 0170000) == 0020000)/* char special */
#defineS_ISBLK(m)((m & 0170000) == 0060000)/* block special */
#defineS_ISREG(m)((m & 0170000) == 0100000)/* regular file */
#defineS_ISFIFO(m)((m & 0170000) == 0010000)/* fifo */
#ifndef _POSIX_SOURCE
#defineS_ISLNK(m)((m & 0170000) == 0120000)/* symbolic link */
#defineS_ISSOCK(m)((m & 0170000) == 0140000)/* socket */
#endif
#ifndef KERNEL
#include
__BEGIN_DECLS
mode_tumask __P((mode_t));
intchmod __P((const char *, mode_t));
intfstat __P((int, struct stat *));
intmkdir __P((const char *, mode_t));
intmkfifo __P((const char *, mode_t));
intstat __P((const char *, struct stat *));
#ifndef _POSIX_SOURCE
intfchmod __P((int, mode_t));
intlstat __P((const char *, struct stat *));
#endif /* not POSIX */
__END_DECLS
#endif
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。