本章节补充一些目录和文件操作的更多知识,因为这些知识涉及到时间操作,所以放在时间操作之后的章节中介绍。

access库函数

access函数用于判断当前操作系统用户对文件或目录的存取权限。

包含头文件:

#include <unistd.h>

函数声明:

int access(const char *pathname, int mode);

参数说明:

pathname文件名或目录名,可以是当前目录的文件或目录,也可以列出全路径。

mode 需要判断的存取权限。在头文件unistd.h中的预定义如下:

#define R_OK 4     // R_OK 只判断是否有读权限

#define W_OK 2    // W_OK 只判断是否有写权限

#define X_OK 1     // X_OK 判断是否有执行权限

#define F_OK 0     // F_OK 只判断是否存在

返回值:

当pathname满足mode的条件时候返回0,不满足返回-1。

在实际开发中,access函数主要用于判断文件或目录是否是存在。

stat库函数

1、stat结构体

struct stat结构体用于存放文件和目录的状态信息,如下:

struct stat

{

dev_t st_dev;   // device 文件的设备编号

ino_t st_ino;   // inode 文件的i-node

mode_t st_mode;   // protection 文件的类型和存取的权限

nlink_t st_nlink;   // number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1.

uid_t st_uid;   // user ID of owner 文件所有者的用户识别码

gid_t st_gid;   // group ID of owner 文件所有者的组识别码

dev_t st_rdev;  // device type 若此文件为设备文件, 则为其设备编号

off_t st_size;  // total size, in bytes 文件大小, 以字节计算

unsigned long st_blksize;  // blocksize for filesystem I/O 文件系统的I/O 缓冲区大小.

unsigned long st_blocks;  // number of blocks allocated 占用文件区块的个数, 每一区块大小为512 个字节.

time_t st_atime;  // time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、 utime、read、write 与tructate 时改变.

time_t st_mtime;  // time of last modification 文件最后一次被修改的时间, 一般只有在用mknod、 utime 和write 时才会改变

time_t st_ctime;  // time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、 权限被更改时更新

};

struct stat结构体的成员变量比较多,对程序员来说,重点关注st_mode、st_size和st_mtime成员就可以了。注意st_mtime是一个整数表达的时间,需要程序员自己写代码转换格式。

st_mode成员的取值很多,或者使用如下两个宏来判断。

S_ISREG (st_mode) 是否为一般文件

S_ISDIR (st_mode) 是否为目录

2、stat库函数

包含头文件:

#include <sys/types.h>

#include <sys/stat.h>

#include <unistd.h>

函数声明:

int stat(const char *path, struct stat *buf);

stat函数获取path指定文件或目录的信息,并将信息保存到结构体buf中,执行成功返回0,失败返回-1。

示例(book145.c)

运行结果

utime库函数

utime函数用于修改文件的存取时间和更改时间。

包含头文件:

#include <utime.h>

函数声明:

int utime(const char *filename, const struct utimbuf *times);

函数说明:utime()用来修改参数filename 文件所属的inode 存取时间。如果参数times为空指针(NULL), 则该文件的存取时间和更改时间全部会设为目前时间。结构utimbuf 定义如下:

struct utimbuf

{

time_t actime;

time_t modtime;

};

返回值:执行成功则返回0,失败返回-1。

rename库函数

rename函数用于重命名文件或目录,相当于操作系统的mv命令,对程序员来说,在程序中极少重命名目录,但重命名文件是经常用到的功能。

包含头文件:

#include <stdio.h>

函数声明:

int rename(const char *oldpath, const char *newpath);

参数说明:

oldpath 文件或目录的原名。

newpath 文件或目录的新的名称。

返回值:0-成功,-1-失败。

remove库函数

remove函数用于删除文件或目录,相当于操作系统的rm命令。

包含头文件:

#include <stdio.h>

函数声明:

int remove(const char *pathname);

参数说明:

pathname 待删除的文件或目录名。

返回值:0-成功,-1-失败。

版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

来源:C语言技术网(www.freecplus.net)

作者:码农有道

如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!

如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!

C语言目录文件操作补充相关推荐

  1. php 语言文件操作,php中目录文件操作详谈

    php中目录文件操作详谈 首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,以下是小编整理的php中目录,文件操作详谈,欢迎来 ...

  2. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )

    文章目录 一.追加键值对数据 二.更新键值对数据 三.完整代码示例 一.追加键值对数据 在上一篇博客 [C 语言]文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取 ...

  3. 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )

    文章目录 一.文件名路径设置 二.文件打开方式 三.fputc 函数 | 按照字符方式写文件 1.fputc 函数 2.代码示例 四.fgetc 函数 | 按照字符方式读文件 1.fgetc 函数 2 ...

  4. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )

    文章目录 一.学生管理系统 二.代码示例 一.学生管理系统 前两篇博客 [C 语言]文件操作 ( 将结构体写出到文件中并读取结构体数据 | 将结构体数组写出到文件中并读取结构体数组数据 ) [C 语言 ...

  5. 【C 语言】文件操作 ( 使用 fread 和 fwrite 实现二进制文件的拷贝 | stat 统计文件大小 | feof 判定文件结尾 )

    文章目录 一.stat 统计文件大小 二.feof 判定文件结尾 三.使用 fread 和 fwrite 实现二进制文件的拷贝 一.stat 统计文件大小 统计文件大小 , 需要借助 stat 结构体 ...

  6. go 默认http版本_【每日一库】超赞的 Go 语言 INI 文件操作

    点击上方蓝色"Go语言中文网"关注我们,领全套Go资料,每天学习 Go 语言 如果你使用 INI 作为系统的配置文件,那么一定会使用这个库吧.没错,它就是号称地表 最强大.最方便  ...

  7. C语言复习——文件操作以及各种输入输出

    翁老师说现在很少有人直接用C语言来操作文件来储存或者读取数据了,稍微有点量的用数据库.个人觉得C语言实现文件操作还是挺有意思的.做个练习--一个简单的学生信息系统 头文件 #ifndef _STUDE ...

  8. C语言进阶-文件操作超详解

    目录 为什么使用文件 什么是文件 分类(从文件功能的角度) 文件名 文件的打开和关闭 文件指针 fopen和fclose函数 打开方式表 文件的顺序读写 顺序读写函数表 什么是输入输出流 fgetc/ ...

  9. linux下c语言读写文件操作,linux下的系统级c语言文件读写操作

    最近初次接触Linux这么高端的东西,有种进城的感觉.进了linux,发现城里人说话做事的方式都很不一样. 个人感觉,初次接触linux主要的痛点在于命令行交互的方式,这就要求我接受城里人的思维,wh ...

最新文章

  1. 实例15 判断某一年是否为闰年
  2. python完全新手教程-Python完全新手教程
  3. ospf 环回口的路由条目_【网络工程师配置篇】——OSPF汇总配置!
  4. stm32F1使用SD卡实现IAP
  5. SGCheck:一个实验堆栈和全局数组溢出检测器
  6. Python风格总结:遍历技巧
  7. jquery 获取 radio值 与 jQuery filter() 方法
  8. WEB前端之学会用PS很重要
  9. 华为设备,什么是MAC地址漂移
  10. Python爬虫实例:爬取“查IPIP”查询结果,查询IP地址归属地
  11. 【我的OpenGL学习进阶之旅】什么是PVR文件以及如何打开它?
  12. “落子无悔,抉择本身就是向前”——2022年度总结
  13. 入门使用-腾讯地图API
  14. 帝国cms栏目添加二级域名
  15. 【区块链实战】区块链在哪些行业得到了应用
  16. 数据库(SQL)中where与having的区别:
  17. linux autoconf 升级,autoconf问题
  18. React Native 热更新方案
  19. java调用oracle过程,JAVA调用ORACLE存储过程报错
  20. 中英文全角半角括号转换

热门文章

  1. 有没有什么方法快速能找到导致软件崩溃的进程_手机软件闪退闪得怀疑人生?看我专治闪退二十年!...
  2. 5 批量更新多条记录_如何使用 F12 开发者工具自动批量删除新浪微博
  3. PAT-甲级之树遍历问题的总结
  4. vs ajax工具包引用,vs2008中使用AJAX Control Tookit工具的问题?
  5. OpenCV中cvLoadImage()函数和cvCreateImage()函数的异同之处!
  6. docker容器内没有yum命令_为什么不建议把数据库部署在Docker容器内?
  7. php考过来运行后报乱码,PHP接收GET中文参数乱码怎么办
  8. python32什么意思_“python2”和“python3”有什么区别?
  9. 进程异常行为-访问恶意下载源 解决方案_不要忽略服务器上的异常进程
  10. idea mybaits逆向工程_IDEA 中集成 MyBatis Generator 组件逆向生成工程