Linux 文件和目录操作函数
更新时间:2023-08-20 00:58: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 文件和目录操作函数08-20
大集中系统财务会计报表电子数据采集管理模块操作指引08-07
产业经济学专业研究生中文参考资料选录11-07
小学生二年级写动物的作文范文06-13
2014年全省高校教师高中级职务任职资格省学科组及有权学校评审通06-06
应收应付管理04-19
中秋节手抄报图片大全简单又漂亮字少大全03-26
- 2012诗歌鉴赏讲座 师大附中张海波
- 2012-2013学年江苏省苏州市五市三区高三(上)期中数学模拟试卷(一)
- 市政基础设施工程竣工验收资料
- 小方坯连铸机专用超越离合器(引锭杆存放用)
- 荀子的学术性质之我见
- 氩弧焊管轧纹生产线操作说明
- 小学科学六年级上册教案
- (商务)英语专业大全
- 外汇储备的快速增长对我国经济发展的影响
- 幼儿园中班优秀语言教案《小猴的出租车》
- 第七章 仪表与显示系统
- 身份证号码前6位行政区划与籍贯对应表
- 单位(子单位)工程验收通知书
- 浅谈地铁工程施工的项目成本管理
- 沉积学知识点整理
- 前期物业管理中物业服务企业的法律地位
- 2014微量养分营养试卷
- 地质专业校内实习报告范文(通用版)
- 内部审计视角下我国高校教育经费支出绩效审计研究
- 高次插值龙格现象并作图数值分析实验1
- 函数
- 操作
- 文件
- 目录
- Linux
- 三国杀所有武将名字的技能
- 二年级音乐下学期工作计划
- 社区护士对护理风险隐患的防范措施
- 学习英语新课标的点滴体会
- 紫外分光光度法检测规程
- 中班英语教案《Go to the zoo》
- 学校教育心理学复习资料
- PVC转化器腐蚀原因分析和防护办法
- 遥控无人机航拍(航空摄影)作业合同书
- 如何进行和做好人才测评工作
- LED的发展及意义
- 校级优秀团员申请书
- 前台接待技能及礼仪培训
- 安全心理学在煤矿生产中的应用分析
- 陈古资:1.9美指与美股齐飞,金银携铜油非农
- unit5 creating a caribbean spring festival
- 技术指标第五讲:布林通道的应用
- 中石油炼化设备分类及编码炼油化工
- 工资表及打印工资条表模版
- 毕业设计论文(借鉴)