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

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中的info指令详解
Info 是什么?info是一种文档格式,也是阅读此格式文档的阅读器:我们常用它来查看Linux命令的info文档.它以主题的形式把几个命令组织在一起,以便于我们阅读:在主题内以node(节点)的形式把本主题的几个命令串联在一起. 页面最上方的一行信息分别是:本node(节点,以下统称节点)所在文件的文件名.本节点的名称.下一节点的名称.前一节点的名称.上一节点的名称. Menu下方就是本主题内的命令,敲M键,然后输入命令的名称就可以查看该命令的info帮助文档了. 下面介绍一下它的几个常用快捷
-
关于Linux下对于makefile的理解
什么是makefile呢?在Linux下makefile我们可以把理解为工程的编译规则.一个工程中源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要后编译,那些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个shell脚本一样,其中也可执行操作系统的命令. makefile带来的好处就是---"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开
-
Linux xargs命令详细介绍
Linux xargs命令 1.功能: xargs可以将stdin中以空格或换行符进行分隔的数据,形成以空格分隔的参数(arguments),传递给其他命令.因为以空格作为分隔符,所以有一些文件名或者其他意义的名词内含有空格的时候,xargs可能会误判.简单来说,xargs是给其他命令传递参数的一个过滤器,是构建单行命令的重要组件之一. 之所以要用到xargs,是因为由于很多命令不支持使用管道|来传递参数,例如: find /sbin -perm +700 |ls -l //这个命令是错误,因
-
微信小程序 Linux开发环境设置详解
微信小程序 Linux开发环境 微信小程序开发工具是用nw.js实现的,这玩意本来就可以跨平台的.搞不懂为什么微信只出了windows和mac版.今天我捣腾了一下,可以在linux下开发微信小程序了.以ubuntu为例: 首先要安装nwjs sdk环境,因为需要devtool的支援, 一定要安装sdk版本. 下载nwjs sdk压缩包之后解压放到你喜欢的位置,并且设置环境变量,nw可执行文件加入到path变量中. 接下来要去提取微信小程序开发工具的package.nw文件,这是nwjs的项目包文
-
Linux虚拟机下mysql 5.7安装配置方法图文教程
记录一下Linux虚拟机下MySQL安装配置方法 一. 下载mysql5.7 http://mirrors.sohu.com/mysql/MySQL-5.7/ Linux下载: 输入命令:wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 二.建立用户,以及mysql的目录 1.建立一个mysql的组 输入命令: groupadd mysql 2.建立mysql用户,并放到m
-
Linux 常用命令挂载命令详解
查询与自动挂载 mount 查询系统中已经挂载的设备 mount -a 依据配置文件 /etc/fstab的内容,自动挂载 挂载命令格式 mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点 选项: -t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660等文件系统 -o 特殊选项:可以指定挂载的额外选项 下面是额外选项的表格: 挂载光盘 mkdir /mnt/cdrom/ 建立挂载点 mount -t iso9660 /dev/sr0 /mnt
-
linux二进制通用包安装mysql5.6.20教程
我们使用二进制通用包安装MySQL,这个类似于windows下的绿色软件,解压后配置即可使用,下载地址: https://edelivery.Oracle.com/EPD/Search/handle_go 2.将二进制mysql安装文件解压到/usr/local下,这里使用软连接为mysql [root@mysql1 soft]tar xvf mysql-advanced-5.6.20-linux-glibc2.5-x86_64.tar.gz -C /usr/local [root@mysql1
-
linux下mysql的root密码忘记的解决方法
五步轻松解决mysql root密码忘记的问题,希望对大家有帮助. 1.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句,skip-grant-tables 例如: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock skip-grant-tables 2.重新启动mysql # service mysql start 3.登录并修改MySQL的root密码 # mysql
-
Linux od命令详细介绍及用法实例
Linux od命令详解 1.功能 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符.od命令系统默认的显示方式是八进制,名称源于Octal Dump. 常见的文件为文本文件和二进制文件.od命令主要用来查看保存在二进制文件中的值,按照指定格式解释文件中的数据并输出,不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值. 大家也可以了解一下hexdump命令,以十六进制输出,
-
linux系统下oracle11gR2静默安装的经验分享
前言: 1.我的linux是64位的redhat6.5,安装的oracle版本是11.2.0的. 2.我这是自己安装的linux虚拟机,主机名为ora11g,ip为192.168.100.122 3.这台机器以前没有安装过oracle数据库,这是第一次安装:系统安装好了之后,仅仅只配了ip地址:所以新手完全可以按照我的步骤装一次oracle. 准备工作: 1.确认主机名一致: [root@ora11g ~]# vi /etc/hosts 在末尾添加 (#其中192.168.100.123为本
-
Linux下简易进度条的实现代码
在生活中,进度条是很常见的,那么,进度条是如何实现的呢? 首先,进度条的动态是利用人眼视觉暂留效果的.实际上是如下过程: 先输出:[= ]表示进度是1%,刷新之后 再输出:[== ]......由于刷新的很快,所以看起来像是等号不断向后增加,直到进度完成. 在写这个程序之前我们需要了解一下的知识: 1.缓冲区 缓冲区分为无缓冲.行缓冲.全缓冲. 无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr. 行缓冲:表示的是输入输出遇到换行才执行真正的I/O操
随机推荐
- Erlang分布式节点中的注册进程使用实例
- 关于Java数组查询的相关问题及实例 原创
- JS 精确统计网站访问量的实例代码
- JSP 自动刷新的实例详解
- Android编程判断网络是否可用及调用系统设置项的方法
- PHP、Nginx、Apache中禁止网页被iframe引用的方法
- android通过gps获取定位的位置数据和gps经纬度
- linux中Jetty的安装和配置方法
- MySQL分表自增ID问题的解决方法
- python练习程序批量修改文件名
- jQuery EasyUI API 中文文档 - ProgressBar 进度条
- Jquery知识点三 jquery表单对象操作
- 浅谈javascript的闭包
- 基于JavaScript实现五子棋游戏
- Linux关于透明大页的使用与禁用介绍
- JavaScript实现的前端AES加密解密功能【基于CryptoJS】
- 简单易懂讲解happens-before原则
- python 机器学习之支持向量机非线性回归SVR模型
- 使用pycharm在本地开发并实时同步到服务器
- 说说如何在Vue.js中实现数字输入组件的方法
其他
- jQuery实现动态添加、删除按钮及input输入框的方法
- android camera自定义
- centos环境中的mssql密码过期是否会导致不能重启
- Spring Security OAuth2 实现登录互踢
- eclipse安装actiBPM
- mybatis字段变大写
- valet nginx 自建站点 冲突
- a href 跳转后链接自动加上了#号
- JS获取 div 下面img图片地址
- cocos creator3.x 预制体
- 为什么箭头函数加import就可以shi xian懒加载
- vscode彩虹屁插件如何关掉网页执行
- AJAX与Springboot
- 人脸识别中级联分类器的检测过程
- iframe token放在header
- jdbctemplate连接数据库
- mybatis Executor拦截器
- vue 自定义组件 hide
- vue 封装vuex
- pygame通过键盘方向键移动