文件和目录详解---statlstat和fstat函数详解

Posted

tags:

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

    记录文件属性的相关数据结构都是存在于内核空间中,在进程的用户空间中是直接访问不到这些数据结构的,只能通过操作系统提供的系统调用来访问。而stat等函数就是操作系统为用户进程提供的用来获取文件属性的系统调用。
=======================================================
函数原型:
技术分享
技术分享
函数参数:
  • path:要操作文件的路径名
  • fd:要操作的文件描述符
  • buf:存放读取出来的文件属性
返回值:
  • 调用成功时返回 0 
  • 调用失败时返回 -1
========================================================
    lstat函数和stat函数作用是类似的,只不过当要读取的文件是符号链接文件时,lstat函数获取的是符号链接文件的属性,而stat函数获取的是符号链接文件指向的实际文件的属性。
    结构体struct stat用来存放读取出来的文件属性,其内部的成员如下图所示
技术分享
技术分享
=======================================================
    文件读写权限和类型是存放在文件的struct inode结构体中的i_mode变量中,mode_t基本数据类型实质上是short类型,占用两个字节一共16位。这16位中的前4位用来表示文件的类型。中间3位表示权限修饰位,后面9位代表所有者、同组用户以及其他用户的权限
    Linux提供了一些特殊的宏给用户进程使用以判断文件的类型,由于Linux中有 7 种类型的文件,所以对应有 7 种判断文件类型的宏。这 7 种宏分别是:
S_ISREG(buf.st_mode)        (普通文件)
S_ISDIR(buf.st_mode)         (目录文件)
S_ISBLK(buf.st_mode)         (块设备文件)
S_ISCHR(buf.st_mode)        (字符设备文件)
S_ISLNK(buf.st_mode)        (符号链接文件)
S_ISFIFO(buf.st_mode)        (有名管道文件)
S_ISSOCK(buf.st_mode)      (套接字文件)
 
    Linux中还提供了两个用来表示set-user-id和set-group-id两位(权限修饰位)的宏,这两位主要会影响到进程的有效用户 ID 和进程实际用户 ID 的。详情参见笔记“与进程有关的ID”。
S_ISUID       (设置了set-user-id位)
S_ISGID       (设置了set-group-id位)
 
    Linux中提供了9个表示所有者、同组用户以及其他用户的权限的宏。
S_IRUSR        (用户读权限)
S_IWUSR        (用户写权限)
S_IXUSR          (用户执行权限)
S_IRGRP          (同组用户读权限)
S_IWGRP         (同组用户写权限)
S_IXGRP        (同组用户执行权限)
S_IROTH        (其他用户读权限)
S_IWOTH        (其他用户写权限)
S_IXOTH        (其他用户执行权限)
 
 

以上是关于文件和目录详解---statlstat和fstat函数详解的主要内容,如果未能解决你的问题,请参考以下文章

Stat(),Lstat(),Fstat() 获取文件/目录的相关信息

Linux应用开发:文件属性与目录(上)

c 使用 fstat 问题比较文件大小

Linux系统statlstat函数

Linux系统statlstat函数

APUE---文件和目录