stat函数说明:
头文件: #包含
#包含
定义函数: int stat (const char * file _ name,struct stat *buf );
函数说明:从文件名filename取得文件信息,并保存到buf指示的结构体stat中
返回值:在执行成功时返回0,失败时返回-1,错误代码保存在errno中
错误代码:
由ENOENT参数file_name指定的文件不存在
ENOTDIR路径中的目录存在,但不是实际目录
ELOOP尝试打开的文件存在最多16个符号连接过多的符号连接问题
EFAULT参数buf是无效的指针,指向不能存在的内存区域
EACCESS被拒绝访问文档
ENOMEM核心内存不足
名称too long参数file_name的路径名太长
intstat(constchar*file_name,struct stat *buf );
intfstat(intfiledes,结构开始* buf );
stat结构在/usr/include/sys/stat.h文件中定义
struct stat finfo;
stat(sfilename,finfo );
int size=finfo. st_size;
结构启动{
模式_ t ST _ mode; //文件对应模式、文件、目录等
ino_t st_ino; //I节点编号
dev_t st_dev; //设备编号
dev_t st_rdev; //特殊设备编号
nlink_t st_nlink; //文件连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //与文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //上次访问文件的时间
time_t st_mtime; //上次修改文件内容的时间
time_t st_ctime; //改变文件的状态(属性)时间
blksize_t st_blksize; //与文件内容对应的块大小
blkcnt_t st_blocks; //与文件内容对应的块数
(;
stat用于确定未打开的文件,而fstat用于确定打开的文件。 我们使用最多的属性是st_mode。 通过属性,可以判断给定的文件是普通文件还是目录、连接等。 可以使用以下几个宏来判断。
s_islnk(ST_mode ) :是否连接?
S_ISREG是普通文件吗?
S_ISDIR是否为目录
S_ISCHR是字符设备吗?
S_ISBLK是否为块设备
S_ISFIFO是FIFO文件吗?
S_ISSOCK是套接字文件吗?
使用方法:
//定义结构
结构启动m;
//用户输入的文件名(用于确定是否是目录)。
char *filename;
int a;
intn=stat(filename,m );
a=s_isdir(m.ST_mode );
如果a为true,则为目录,否则为目录。