Linux 文件和目录操作函数
更新时间:2023-07-22 16:17:01 阅读量: 实用文档 文档下载
- linux推荐度:
- 相关推荐
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
Linux
数
文件和目录操作函
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
文档更新记录
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
只供内部使用
目 录
2
引言 ........................................................................................................................................... 4 2.1 2.2 2.3 2.4 3
编写目的 ......................................................................................................................... 4 预期读者和阅读建议 ..................................................................................................... 4 参考资料 ......................................................................................................................... 4 缩写术语 ......................................................................................................................... 4
底层文件操作 ........................................................................................................................... 5 3.1 3.2 3.3
概述 ................................................................................................................................. 5 所需头文件 ..................................................................................................................... 5 函数列表 ......................................................................................................................... 5 3.3.1 creat ....................................................................................................................... 5 3.3.2 open ....................................................................................................................... 5 3.3.3 close ...................................................................................................................... 7 3.3.4 read ........................................................................................................................ 7 3.3.5 write ...................................................................................................................... 8 3.3.6 lseek ...................................................................................................................... 8 3.3.7 access .................................................................................................................... 9 3.3.8 link ...................................................................................................................... 10 3.3.9 unlink .................................................................................................................. 10 3.3.10 fcntl ................................................................................................................... 10 3.3.11 stat ..................................................................................................................... 12 3.4 综合示例 ....................................................................................................................... 12
4 5
带缓冲区的文件操作 ............................................................................................................. 12 目录操作 ................................................................................................................................. 12
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
1 引言
1.1
编写目的
文档中包含文件的底层操作、带缓冲区的操作、以及目录的相关操作。 1.2
1.3
参考资料
【1】 /zheng_he_xiang/blog/static/18650532620116311028365/ 【2】 1.4 缩写术语
预期读者和阅读建议
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
2 底层文件操作
2.1
概述
底层文件操作,适合所有普通的文件。本操作集合以文件描述符为中心,描述普通文件的各种操作方法。 2.2
所需头文件
所需头文件列表如下:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> 2.3
函数列表
2.3.1 creat 2.3.1.1 函数原型
函数原型如下:
int creat(const char *pathname, mode_t mode);
2.3.1.2 功能介绍
按照指定名称和权限,创建对应的文件。 2.3.1.3 参数介绍
pathname
表示要打开的文件名(包含路径名称,缺省是认为在当前路径下面)。 mode
指定新建文件的存取权限,它同umask一起决定文件的最终权限(mode&umask),其中umask代表了文件在创建时需要去掉的一些存取权限。umask可通过系统调用umask()来改变:
int umask(int newmask);
关于更详细的介绍,请参考open()函数对应内容。
2.3.1.4 返回值
成功:返回一个文件描述符。
失败:返回-1, 错误由errno指示。错误信息可通过strerror(errno)进行查看。 2.3.1.5 注意事项 2.3.1.6 使用示例
2.3.2 open 2.3.2.1 函数原型
函数原型如下:
int open(const char *pathname, int flags);
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
int open(const char *pathname, int flags, mode_t mode); open()函数为变参函数。
2.3.2.2 功能介绍
按照指定名称和权限,打开或创建对应的文件。 2.3.2.3 参数介绍
pathname
表示要打开的文件名(包含路径名称,缺省是认为在当前路径下面)。 flags
表示打开文件的方式。
mode
mode只有在创建文件时有效,用于指定文件的访问权限。
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
除了可以通过上述宏进行“或”逻辑产生标志以外,我们也可以自己用数字来表示,Linux总共用5个数字来表示文件的各种权限:第一位表示设置用户ID;第二位表示设置组ID;第三位表示用户自己的权限位;第四位表示组的权限;最后一位表示其他人的权限。每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无)或者是这些值的和。例如,要创建一个用户可读、可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户ID位。那么,我们应该使用的模式是1(设置用户ID)、0(不设置组ID)、7(1+2+4,读、写、执行)、0(没有权限)、5(1+4,读、执行)即10705:
open("test", O_CREAT, 10705);
以上语句相当于:
open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );
2.3.2.4 返回值
成功:返回一个文件描述符。
失败:返回-1, 错误由errno指示。错误信息可通过strerror(errno)进行查看。 2.3.2.5 注意事项 2.3.2.6 使用示例
2.3.3 close
用于关闭由creat()或open()打开的文件。 2.3.4 read 2.3.4.1 函数原型
函数原型如下:
ssize_t read(int fd, void *buf, size_t count);
2.3.4.2 功能介绍
函数read()实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。 2.3.4.3 参数介绍
fd
文件描述符,通过creat()或open()获取。 buf
指向缓冲区的指针。 count
缓冲区的长度,单位为字节。
2.3.4.4 返回值
成功:返回读取的字节数。
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
失败:返回-1并设置errno。错误信息可通过strerror(errno)进行查看。 到达文件末尾:如果在调read之前已到达文件末尾,则这次read返回0。 2.3.4.5 注意事项 2.3.4.6 使用示例
2.3.5 write 2.3.5.1 函数原型
函数原型如下:
ssize_t write(int fd, const void *buf, size_t count);
2.3.5.2 功能介绍
函数write实现将把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。 2.3.5.3 参数介绍
fd
文件描述符,通过creat()或open()获取。 buf
指向缓冲区的指针。 count
缓冲区的长度,单位为字节。
2.3.5.4 返回值
成功:返回读取的字节数。
失败:返回-1并设置errno。错误信息可通过strerror(errno)进行查看。 2.3.5.5 注意事项 2.3.5.6 使用示例
2.3.6 lseek 2.3.6.1 函数原型
函数原型如下:
off_t lseek(int fd, off_t offset, int whence);
2.3.6.2 功能介绍
lseek()将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。 2.3.6.3 参数介绍
fd
文件描述符。 offset
表示偏移量。offset可取负值,例如下述调用可将文件指针相对当前位置向前移
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
动5个字节:
lseek(fd, -5, SEEK_CUR);
whence
参数whence可使用下述值:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置 SEEK_END:相对文件末尾 2.3.6.4 返回值
成功:返回文件指针相对于文件头的位置,即二者距离,单位为字节。
失败:返回-1, 错误由errno指示。错误信息可通过strerror(errno)进行查看。 2.3.6.5 注意事项 2.3.6.6 使用示例
获取整个文件的长度:
由于lseek函数的返回值为文件指针相对于文件头的位置,因此下列调用的返回值就是文件的长度:
lseek(fd, 0, SEEK_END);
2.3.7 access 2.3.7.1 函数原型
函数原型如下:
int access(const char *pathname, int mode);
2.3.7.2 功能介绍
用于检查调用进程是否可以对指定的文件执行某种操作。 2.3.7.3 参数介绍
pathname
表示要打开的文件名(包含路径名称,缺省是认为在当前路径下面)。 mode
表示需要测试的操作模式。mode可以是如下值的组合体: R_OK: 可读 W_OK: 可写 X_OK: 可执行 F_OK: 文件存在 2.3.7.4 返回值
成功:返回0。
失败:返回-1, 错误由errno指示。错误信息可通过strerror(errno)进行查看。
errno被设为以下的某个值 EINVAL: 模式值无效
EACCES: 文件或路径名中包含的目录不可访问 ELOOP : 解释路径名过程中存在太多的符号连接 ENAMETOOLONG:路径名太长
ENOENT: 路径名中的目录不存在或是无效的符号连接
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
ENOTDIR: 路径名中当作目录的组件并非目录 EROFS: 文件系统只读
EFAULT: 路径名指向可访问的空间外 EIO: 输入输出错误
ENOMEM: 不能获取足够的内核内存 ETXTBSY:对程序写入出错
2.3.7.5 注意事项 2.3.7.6 使用示例
2.3.8 link 2.3.9 unlink 2.3.10 fcntl 2.3.10.1 函数原型
函数原型如下:
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock); open()函数为变参函数。 2.3.10.2 功能介绍
fcntl()针对(文件)描述符提供控制。参数fd是被参数cmd操作(如下面的描述)的描述符。针对cmd的值,fcntl能够接受第三个参数int arg。
fcntl函数有5种功能:
1. 复制一个现有的描述符(cmd=F_DUPFD)
2. 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD) 3. 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL)
4. 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN) 5. 获得/设置记录锁(cmd=F_GETLK , F_SETLK或F_SETLKW) 2.3.10.2.1 复制描述符
最小的大于或等于arg的一个可用的描述; 与原始操作符一样的某对象的引用;
如果对象是文件(file)的话,则返回一个新的描述符,这个描述符与arg共享相
同的偏移量(offset);
相同的访问模式(读,写或读/写);
相同的文件状态标志(如:两个文件描述符共享相同的状态标志);
与新的文件描述符结合在一起的close-on-exec标志被设置成交叉式访问
execve(2)的系统调用。
实际上调用dup(oldfd); 等效于
fcntl(oldfd, F_DUPFD, 0); 而调用dup2(oldfd, newfd); 等效于
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
close(oldfd);
fcntl(oldfd, F_DUPFD, newfd);
2.3.10.2.2 描述符标记操作
F_GETFD 取得与文件描述符fd联合的close-on-exec标志,类似FD_CLOEXEC。如果返回值和FD_CLOEXEC进行与运算结果是0的话,文件保持交叉式访问exec(),否则如果通过exec运行的话,文件将被关闭(arg 被忽略)
F_SETFD 设置close-on-exec标志,该标志以参数arg的FD_CLOEXEC位决定,应当了解很多现存的涉及文件描述符标志的程序并不使用常数 FD_CLOEXEC,而是将此标志设置为0(系统默认,在exec时不关闭)或1(在exec时关闭)
在修改文件描述符标志或文件状态标志时必须谨慎,先要取得现在的标志值,然后按照希望修改它,最后设置新标志值。不能只是执行F_SETFD或F_SETFL命令,这样会关闭以前设置的标志位。
2.3.10.2.3 文件状态标记操作
F_GETFL 取得fd的文件状态标志,如同下面的描述一样(arg被忽略),在说明open函数时,已说明了文件状态标志。不幸的是,三个存取方式标志 (O_RDONLY , O_WRONLY , 以及O_RDWR)并不各占1位。(这三种标志的值各是0 , 1和2,由于历史原因,这三种值互斥 — 一个文件只能有这三种值之一。) 因此首先必须用屏蔽字O_ACCMODE相与取得存取方式位,然后将结果与这三种值相比较。
F_SETFL 设置给arg描述符状态标志,可以更改的几个标志是:O_APPEND,O_NONBLOCK,O_SYNC 和 O_ASYNC。而fcntl的文件状态标志总共有7个:O_RDONLY , O_WRONLY , O_RDWR , O_APPEND , O_NONBLOCK , O_SYNC和O_ASYNC 可更改的几个标志如下面的描述:
O_NONBLOCK 非阻塞I/O,如果read(2)调用没有可读取的数据,或者如果write(2)操作将阻塞,则read或write调用将返回-1和EAGAIN错误
O_APPEND 强制每次写(write)操作都添加在文件大的末尾,相当于open(2)的O_APPEND标志
O_DIRECT 最小化或去掉reading和writing的缓存影响。系统将企图避免缓存你的读或写的数据。如果不能够避免缓存,那么它将最小化已经被缓存了的数据造成的影响。如果这个标志用的不够好,将大大的降低性能
O_ASYNC 当I/O可用的时候,允许SIGIO信号发送到进程组,例如:当有数据可以读的时候。
完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
2.3.10.2.4 异步I/O所有权操作
F_GETOWN 取得当前正在接收SIGIO或者SIGURG信号的进程id或进程组id,进程组id返回的是负值(arg被忽略) 。
F_SETOWN 设置将接收SIGIO和SIGURG信号的进程id或进程组id,进程组id通过提供负值的arg来说明(arg绝对值的一个进程组ID),否则arg将被认为是进程id。
2.3.10.2.5 记录锁操作
获得/设置记录锁的功能,成功则返回0,若有错误则返回-1,错误原因存于errno。
2.3.10.3 参数介绍
2.3.10.4 返回值
成功:返回一个文件描述符。
失败:返回-1, 错误由errno指示。错误信息可通过strerror(errno)进行查看。 2.3.10.5 注意事项 2.3.10.6 使用示例
2.3.11 stat 2.3.11.1 2.3.11.2 2.4
综合示例
3 带缓冲区的文件操作 4 目录操作 5 文件修改操作
方法:s
将文件按行读到内存,同时建立一个行的指针数组或链表。 删除行, 将指针清除。添加行,插入指针。
存盘时候,存到新文件,存成功了再改回原名。
评价:
上述操作比一次性读取文件所有内容的方式要更方便一些。
正在阅读:
Linux 文件和目录操作函数07-22
关于地方门户网选好关键词的一点体会09-02
2011年05月高级人力资源管理师考试真题及答案(一级)12-19
2018年女朋友备注 女朋友备注名称大全02-22
管理学徐国华版全部内容笔记03-30
2022年安庆师范学院信号与系统(同等学力加试)复试仿真模拟三套题04-07
2013-2014电大会计学本科财务案例分析开卷答案10-09
2010高考英语必修1~选修8词组词汇大总结(人教新课标)05-23
2016-环境科学导论复习思考题07-08
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 函数
- 操作
- 文件
- 目录
- Linux
- 《人体解剖学》第一篇
- 陈古资:1.9美指与美股齐飞,金银携铜油非农
- 用公式法进行因式分解(一)
- 湖南青马学习心得.doc
- 经中国国家留学基金管理委员会批准,东华大学可
- 柳州周边可以玩的地方
- 材料专业就职简历
- 复员军人安置问题
- 某县级市政府投资项目管理办法
- 专题15 有机物的组成、结构和性质
- 中方县工业园建设调研报告
- 2017--2018学年北师大版选修7 Unit 19 Language Lesson 2 Varieties of English学案
- 工资表及打印工资条表模版
- 钻孔灌注桩桩端后注浆的质量控制
- 膜式燃气表的计量测试及分析
- 小学数学实施开放式教学的探索
- 文笔不是作文教学的第一要义
- Hibernate面试题部分汇总集合
- 七年级历史下册教案-第1课 隋朝的统一与灭亡2-部编版
- 2013年九年级上学期第一次月考数学试卷