linux下判断文件和目录是否存在的方法(总结)

发布时间 - 2026-01-10 22:26:42    点击率:

1、前言

工作中涉及到文件系统,有时候需要判断文件和目录是否存在。我结合APUE第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便以后查询。

2、stat系列函数

stat函数用来返回与文件有关的结构信息。stat系列函数有三种情况,分别对应文件名称、文件描述符和符号链接文件。stat结构描述了文件的属性,主要包括文件的类型、文件大小等等。详细stat结构如下所示:

struct stat {
  mode_t  st_mode;  // file type & mode(permissions)
  ino_t   st_ino;   // i-node number(serial number)
  dev_t   st_dev;   // device number(filesystem)
  dev_t   st_rdev;  // device number for specials files
  nlink_t  st_nlink;  // number of links
  uid_t   st_uid;   // user ID of owner
  gid_t   st_gid;   // group ID of owner
  off_t   st_size;  // size in bytes, for regular files
  time_t  st_atime;  // time of last access
  time_t  st_mtime;  // time of last modification
  time_t  st_ctime;  // time of last file status change
  long   st_blksize; // best I/O block size
  long   st_blocks; // number of 512-byte blocks allocated
};

我们可以通过stat获取文件的类型和文件大小等信息。文件类型有:普通文件、目录文件、块特殊文件、字符特殊文件、FIFO、套接字和符号链接。要想通过stat系列函数来判断文件或者目录是否存在,当执行stat函数,如果文件存在时,还需进一步判断该文件是普通文件还是目录文件。

stat系列函数错误返回-1,错误码存在errno中,errno取值如下:

1、ENOENT 参数file_name 指定的文件不存在
2、ENOTDIR 路径中的目录存在但却非真正的目录
3、ELOOP 欲打开的文件有过多符号连接问题, 上限为16 符号连接
4、EFAULT 参数buf 为无效指针, 指向无法存在的内存空间
5、EACCESS 存取文件时被拒绝
6、ENOMEM 核心内存不足
7、ENAMETOOLONG 参数file_name 的路径名称太长

3、access函数

access函数按照实际用户ID和实际组进行访问权限测试。函数原型为:

#include <unistd.h>
int access(const char *pathname, int mode);

mode取值:

F_OK   测试文件是否存在

R_OK  测试读权限

W_OK 测试写权限

X_OK 测试执行权限

正确判断一个文件是否存在是用access函数,实现如下所示:

4、oepndir函数

opendir函数用来打开文件目录,成功返回指针,出错返回NULL。实现如下:

以上这篇linux下判断文件和目录是否存在的方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# linux  # 判断  # 文件  # 目录  # Linux中的info指令详解  # linux下mysql的root密码忘记的解决方法  # linux二进制通用包安装mysql5.6.20教程  # 微信小程序 Linux开发环境设置详解  # 关于Linux下对于makefile的理解  # Linux下简易进度条的实现代码  # Linux虚拟机下mysql 5.7安装配置方法图文教程  # linux系统下oracle11gR2静默安装的经验分享  # Linux od命令详细介绍及用法实例  # Linux xargs命令详细介绍  # Linux 常用命令挂载命令详解  # 是否存在  # 给大家  # 所示  # 我们可以  # 第四章  # 希望能  # 要想  # 但却  # 不存在  # 这篇  # 涉及到  # 主要包括  # 太长  # 还需  # 该文件  # 文件系统  # 小编  # 有三种  # 大家多多  # 如何正确 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Thinkphp 中 distinct 的用法解析  常州企业网站制作公司,全国继续教育网怎么登录?  如何用美橙互联一键搭建多站合一网站?  EditPlus中的正则表达式 实战(2)  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  如何在新浪SAE免费搭建个人博客?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  中山网站制作网页,中山新生登记系统登记流程?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何使用Collections进行数据处理?(实用方法示例)  网站制作报价单模板图片,小松挖机官方网站报价?  如何在阿里云ECS服务器部署织梦CMS网站?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何在阿里云高效完成企业建站全流程?  企业网站制作这些问题要关注  android nfc常用标签读取总结  网站建设整体流程解析,建站其实很容易!  Laravel如何实现本地化和多语言支持?(i18n教程)  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Linux网络带宽限制_tc配置实践解析【教程】  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  如何挑选最适合建站的高性能VPS主机?  LinuxCD持续部署教程_自动发布与回滚机制  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  在centOS 7安装mysql 5.7的详细教程  JavaScript常见的五种数组去重的方式  简单实现Android文件上传  进行网站优化必须要坚持的四大原则  制作电商网页,电商供应链怎么做?  Laravel如何处理异常和错误?(Handler示例)