第二阶段03 文件IO属性

加入CSDN是出于记录,希望有不足之处多加指正。

1、文件属性

获取文件的元数据(类型、权限、大小等等)
   头文件:
   #include <sys/types.h>
   #include <sys/stat.h>
   #include <unistd.h>
   函数原型:
   int stat(const char * path, struct stat *buf);
   int fstat(int fd, struct stat *buf);
   int lstat(const char* path, struct stat *buf);
   参数分析:
   path --> 文件路径
   fd -->文件描述符
   buf -->文件属性的结构指针
返回值:
   成功: 返回 0
   失败: 返回 -1,错误号码会被设置

实例:

struct stat
{
   dev_t     st_dev;  //主设备号
   ino_t     st_ino;  // I节点的号码,相当于身份证
   mode_t    st_mode; //文件类型+权限
   nlink_t   st_nlink;  //文件的链接数
   uid_t     st_uid;   //文件拥有者ID
   gid_t     st_gid;   //文件所属小组
   dev_t     st_rdev;  //次设备号
   off_t     st_size;  //文件大小
   blksize_t st_blksize;
   blkcnt_t  st_blocks;
   ......
};

2、设备号

linux 系统为了方便管理,为每一个设备分配了一个主设备号,用来规范设备的类型。次设备号用来规范设备在本系统中的序号,设备号是一个系统的资源,在设备加载的时候已经分配完毕(驱动安装的时候)。

int major(dev_t dev); //从dev 中获取主设备号
int minor(dev_t dev); //从dev 中获取次设备号

3、文件类型与权限

在这里插入图片描述
st_mode[0:8] --对应代表了文件的各个用户权限。
st_mode[9]存储了所谓的粘住为(只对目录有限),在拥有该目录的写权限的情况下,如果这一位被设置为1,那么某一用户也只能删除在本目录下属于自己的文件,否则可以删除任意文件。

st_mode[10] 和 st_mode[11] 分别用来设置文件的suid(只对普通文件有效) 和sgid(只对目录有效)。如果suid被设置为1,则任何用户在执行该文件的时候均会获得该文件所有者的临时授权,即其有效UID将等于文件所有者的UID。如果sgid 被设置为1,则任何在该目录下执行的程序均会获得该目录所属成员的临时授权,即其有效GID将等于该目录的所属组成员的GID.

st_mode [12:15] 用以标识Linux 下不同的文件类型,由于Linux 总共只有7种文件类型,因此4位足以表达。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值