当前位置: 首页 > news >正文

linux的stat/lstat函数和目录遍历函数使用

stat函数:

作用:获取文件属性

函数原型:int stat(const char *pathname, struct stat *statbuf);

返回值:成功返回0

               失败返回-1

struct stat {
               dev_t     st_dev;         //文件设备编号
               ino_t     st_ino;         //节点
               mode_t    st_mode;        //文件的类型和存取的权限
               nlink_t   st_nlink;       //连到该文件的硬链接数目,刚建立的文件值为1
               uid_t     st_uid;         //用户ID
               gid_t     st_gid;         //组ID
               dev_t     st_rdev;        //设备类型
               off_t     st_size;        //文件大小(字节数)
               blksize_t st_blksize;     //块大小
               blkcnt_t  st_blocks;      //块数               

               struct timespec st_atim;  //最后一次访问时间
               struct timespec st_mtim;  //最后一次修改时间
               struct timespec st_ctim; //最后一次改变时间(指属性)

}

这是建立的stat.c文件

编译后可以用来访问test.log的属性。 

通过以下操作可以访问文件的类型:

     stat(pathname, &sb);
           if ((sb.st_mode & S_IFMT) == S_IFREG) {
               /* Handle regular file */
           }

           S_IFSOCK   0140000   socket
           S_IFLNK    0120000   symbolic link
           S_IFREG    0100000   regular file
           S_IFBLK    0060000   block device
           S_IFDIR    0040000   directory
           S_IFCHR    0020000   character device
           S_IFIFO    0010000   FIFO

 

 成功:

 或者:

stat(pathname, &sb);
           if (S_ISREG(sb.st_mode)) {
               /* Handle regular file */
           }

           S_ISREG(m)  is it a regular file?

           S_ISDIR(m)  directory?

           S_ISCHR(m)  character device?

           S_ISBLK(m)  block device?

           S_ISFIFO(m) FIFO (named pipe)?

           S_ISLNK(m)  symbolic link?  (Not in POSIX.1-1996.)

           S_ISSOCK(m) socket?  (Not in POSIX.1-1996.)


 

成功:

通过以下操作可以访问文件的权限:

stat(pathname, &sb);

if(sb.st_mode&S_IRUSR) 为真表示用户可读

if(sb.st_m&S_IWUSR) 为真表示用户可写

if(sb.st_mode&S_IXUSR) 为真表示用户可执行

if(sb.st_mode&S_IROTH) 为真表示其他人可读

if(sb.st_mode&S_IRGRP) 为真表示所属组可读

成功:

注意:使用stat函数时,获取软连接文件的属性时获取的是被指向文件的属性,而不是连接文件本身。

所以要使用lstat函数,可以获取软连接文件本身的属性

目录遍历函数:

opendir  :打开目录

 DIR *opendir(const char *name);
使用:先建立一个DIR *pDir=NULL;

然后pDir=opendir(const char *name);

readdir:循环读取目录项

struct dirent *readdir(DIR *dirp);

使用:先建立一个struct dirent *pDent=NULL;

通过while((pDent=opendir(pDir))!=NULL)来循环读取目录里的内容

以下是struct dirent的内容

struct dirent {
               ino_t          d_ino;       /* Inode number */
               off_t          d_off;       /* Not an offset; see below */
               unsigned short d_reclen;    /* Length of this record */
               unsigned char  d_type;      /* Type of file; not supported
                                              by all filesystem types */
               char           d_name[256]; /* Null-terminated filename */
           };
 

closedir :关闭目录

int closedir(DIR *dirp);

操作:

http://www.lryc.cn/news/294778.html

相关文章:

  • HTTP MIME 类型
  • Mac OS中创建适合网络备份的加密镜像文件:详细步骤与参数选择
  • Java TreeSet 添加自定义对象 必须指定排序规则
  • vue - 指令(一)
  • 正则表达式 regex
  • iOS自动打包如何用Python实现
  • springboot161基于springboot的公交线路查询系统
  • 大白话介绍循环神经网络
  • GEE——如何利用降水数据绘制指定区域长时间序列的降水分布图和提取每个月(逐月)的降水平均数据
  • 【软件使用】【edge】如何让edge的某个网页作为应用安装
  • 四大最受欢迎游泳耳机品牌,全球最好的游泳耳机排行榜测评
  • Linux实验记录:使用BIND提供域名解析服务
  • 基于单片机的智能寻光小车设计
  • 数据结构——A/复杂度
  • 锐捷VSU和M-LAG介绍
  • MYSQL——MySQL8.3无法启动
  • PyTorch识别验证码
  • 手把手教你开发Python桌面应用-PyQt6图书管理系统-图书类别信息表格数据显示以及搜索实现
  • 【HarmonyOS】鸿蒙开发之自定义组件——第3.7章
  • 初探unity中的ECS
  • 力扣:131. 分割回文串
  • 2024美赛数学建模B题思路源码
  • 线程的取消和互斥
  • 机器学习之DeepSequence软件使用学习1
  • 【Kotlin】Kotlin环境搭建
  • langgraph学习--创建基本的agent执行器
  • Mybatis中的sql-xml延迟加载机制
  • 【Linux系统学习】1.初识Linux
  • 政安晨:政安晨:机器学习快速入门(三){pandas与scikit-learn} {模型验证及欠拟合与过拟合}
  • 分享65个节日PPT,总有一款适合您