stat函数

Posted wanghao-boke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stat函数相关的知识,希望对你有一定的参考价值。

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

当文件是一个符号链接时,lstat返回的是该符号链接本身的信息,而stat返回的是该链接指向的文件的信息。

struct stat
{
    dev_t        st_dev;        //设备号码
    ino_t        st_ino;        //inode节点号
    mode_t        st_mode;        //文件对应的模式,文件,目录,sock,管道等等
    nlink_t        st_nlink;        //文件的连接数          软连接或硬链接
    uid_t        st_uid;        //文件所有者
    gid_t        st_gid;        //文件所有者对应的组
    dev_t        st_rdev;        //特殊设备号码
    off_t         st_size;        //普通文件,对应的文件字节数
    timestruc_t    st_atim;        //文件最后被访问的时间
    timestruc_t    st_mtim;        //文件内容最后被修改的时间
    timestruc_t    st_ctim;        //文件状态改变时间
    blksize_t        st_blksize;    //文件内容对应的块
    blkcnt_t         st_blocks;    //文件内容对应的块数量
    char         st_fstype[_ST_FSTYPSZ];
};

stat结构体中的st_mode则定义了下列数种情况

             

S_IFMT  

0170000

文件类型的位遮罩

S_IFSOCK

0140000

socket

S_IFLNK

0120000

符号链接

S_IFREG

0100000

一般文件

S_IFBLK

0060000

区块装置

S_IFDIR

0040000

目录

S_IFCHR

0020000

字符装置

S_IFIFO

0010000

先进先出

S_ISUID

04000

文件的(set user-id on execution)位

S_ISGID

02000

文件的(set group-id on execution)位

S_ISVTX

01000

文件的sticky位

S_IRUSR(S_IREAD)

00400

文件所有者具有可读权限

S_IWUSR(S_IWRITE)

00200

文件所有者具有可写权限

S_IXUSR(S_IEXEC)

00100

文件所有者具有可执行权限

S_IRGRP

00040

用户组具有可读权限

S_WGRP

00020

用户组具有可写权限

S_IXGRP

00010

用户组具有可执行权限

S_IROTH

00004

其他用户具有可读权限

S_IWOTH

00002

其他用户具有可写权限

S_IXOTH

00001

其他用户具有可执行权限

 

上述文件类型在POSIX中定义了检查这些类型的宏定义

S_ISLNK (st_mode)

判断是否为符号链接

S_ISREG (st_mode)

判断是否为一般文件

S_ISDIR(st_mode)

是否为目录

S_ISCHR(st_mode)

是否为字符装置文件

S_ISBLK(st_mode)

是否为先进先出

S_ISSOCK(st_mode)

是否为socker

若一般目录具有sticky位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来输出或改名,在linux中,最典型的就是/tmp目录了。

 

以上是关于stat函数的主要内容,如果未能解决你的问题,请参考以下文章

Stat() 函数返回值 -1,因此无法访问文件属性。我该如何纠正?

stat命令的实现-mysate

VSCode自定义代码片段——声明函数

VSCode自定义代码片段8——声明函数

c语言高手们请问一下-stat这个怎么用行么?

20175202 stat命令的实现-mysate