一.概述:
头文件: #包含
#包含
定义函数: 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的路径名太长
二、结构启动结构体:结构启动{
dev_tst_dev; //文件的设备编号
ino_tst_ino; //节点
模式_ tst _ mode; //文件类型和访问权限
nlink_tst_nlink; //到该文件的硬连接数是刚创建的文件的值为1
uid_tst_uid; //用户ID
gid_tst_gid; //组ID
dev_tst_rdev; //)设备类型)如果此文件是设备文件,则为其设备编号
off_tst_size; //文件字节数(文件大小)
unsignedlongst_blksize; //块大小(文件系统的I/O缓冲区大小)
unsignedlongst_blocks; //块数
time_tst_atime; //上次访问时间
time_tst_mtime; //上次修改时间
time_tst_ctime; //最后改变时间((指属性) ) ) )。
(;
上述st_mode定义了以下几种情况:
S_IFMT0170000文件类型的位掩码
S_IFSOCK0140000scoket
S_IFLNK0120000符号连接
S_IFREG0100000一般文件
S_IFBLK0060000块设备
S_IFDIR0040000目录
S_IFCHR0020000字符装置
S_IFIFO0010000先进先出
S_ISUID04000文件的(执行中的setuser-id )位
S_ISGID02000文件的(设置组- id on execution )位
S_ISVTX01000文件的sticky位
s_IRusr(s_iread ) 00400文件的所有者具有可读权限
s_iwusr(s_Iwrite ) 00200文件的所有者具有可写权限
s_ixusr(s_Iexec ) 00100文件的所有者具有执行权限
S_IRGRP00040用户组具有可读权限
S_IWGRP00020用户组具有可写权限
S_IXGRP00010用户组具有可执行的权限
S_IROTH00004其他用户具有可读权限
S_IWOTH00002其他用户具有可写权限
S_IXOTH00001其他用户具有可执行的权限
上述文件类型定义了在POSIX上检查这些类型的宏定义。
s_islnk(ST_mode )判断是否是符号连接
s_isreg(ST_mode )是常用文件吗
s_isdir(ST_mode )是否为目录
s_ischr(ST_mode )是字符设备文件吗
s_isblk(s3e )是否为先进先出
s_issock(ST_mode )是socket吗