linux如何判断目录是否存在

发布时间 - 2019-11-06 00:00:00    点击率:

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

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 的路径名称太长


# linux  # errno  # 是否存在  # 我们可以  # 第四章  # 要想  # 但却  # 不存在  # 所示  # 涉及到  # 主要包括  # 太长 


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


相关推荐: Laravel如何实现密码重置功能_Laravel密码找回与重置流程  Laravel中的Facade(门面)到底是什么原理  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  jQuery中的100个技巧汇总  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何在阿里云部署织梦网站?  再谈Python中的字符串与字符编码(推荐)  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  EditPlus中的正则表达式实战(5)  实例解析Array和String方法  如何在Tomcat中配置并部署网站项目?  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  IOS倒计时设置UIButton标题title的抖动问题  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  智能起名网站制作软件有哪些,制作logo的软件?  Bootstrap整体框架之CSS12栅格系统  香港服务器部署网站为何提示未备案?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel观察者模式如何使用_Laravel Model Observer配置  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何续费美橙建站之星域名及服务?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何在宝塔面板中创建新站点?  微信小程序 五星评分(包括半颗星评分)实例代码  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  无锡营销型网站制作公司,无锡网选车牌流程?  香港服务器租用每月最低只需15元?  网易LOFTER官网链接 老福特网页版登录地址