linux系统编程之文件操作

文件操作函数

 open()read()write()close()lseek()
O_RDONLY 文件为 只读
O_WRONLY 文件为 只写
O_RDWR  文件为 可读可写
O_APPEND 文件为 可追加
O_CREAT  在没有文件的时候创建
O_TRUNC 当文件存在且为可读或可写状态时 清空已存在内容
O_EXCL:如果同时和O_CREAT使用,而文件已经存在,则会出错,不存在则创建文件。
以上七个文件打开方式 较常用 其他标志可自己查询man手册

函数详解

1.open()

由linux man手册可查询文件open函数的用法

由linux

open()
  	pathname 为文件所在位置即路径 如有文件file1.txt 在/tmp/file/file1.txt
	flags 为文件打开方式
	mode 为文件权限   //后续会补充说明

所需头文件:
	#include<syts/types.h>
	#include<sys/stat.h>
	#include<fcntl.h>
返回值
	成功:返回值为文件描述符(一般非0)
	失败:返回值为-1

```c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

1.int open(const char *pathname,int flags);
用于现存文件的打开,pathname为文件路径(包含文件名) 
flags 为文件打开的方式
比如开头介绍的五种方式,注意O_CREAT 一般用于函数(22.int open(const char *pathname,int flags,mode_t mode);
pathname 和 flags 同函数(1),唯一不同的是,函数(2)一般用于未有文件的打开方式
mode 可理解为 赋予文件的权限 为unsigned int 类型 四字节,
比如  值可为0600 
0表示八进制
6表示文件可读可写 6的二进制数为0110 第一位权限总是为0 第一个1为可读 第二1表示可写
所以0600表示 文件用户有可读可写权限

2.read()

在这里插入图片描述

read()
	fd 同样为文件标识符
	buf 为无类型指针 一般用于是字符串信息
	count 是读取的字节数
所需头文件:
	#include<unistd.h>
返回值:
	成功:返回读取实际数据大小
	失败:返回-1

解释:
	从文件标识符为fd的文件中,读取长达count字节的数据存储到buf所指位置

3.write()

在这里插入图片描述

write()
	fd 为文件标识符
	buf 为某个已经存储有信息的数据  一般都为字符串
	count 为buf的大小 单位为字节(byte)
所需头文件:
	#include<unistd.h>	
返回值:
	成功:返回值为实际写入打的数据大小
	失败:返回值为-1
解释:
	向标识符为fd的文件中,写入大小为count的数据,内容为buf所指内容

4.close()

在这里插入图片描述

close() 	
	fd为文件标识符,即可以理解为open函数成功时的返回值 	
成功:返回值为0  	
失败:返回值为-1

上述函数代码演示

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

上述代码
第一次 运行时 打开 提示"文件不存在" 
第一次并没有文件   在创建文件之后
第二次 运行时 打开 提示"文件打开成功"

5.lseek()

       在上述四个函数的代码演示之中,我们发现在我们使用write()函数之后,用 read()函数之前,我们先用了close()函数关闭文件,然后调用open(),最后才是read()函数。这是为什么呢?是代码多写了?还是有其他原因?
       通过写代码 (这个自己尝试,可以先去掉close,直接read 看看什么结果),我们发现,若在write()之后,read()之前,我们没有用close(),会读取文件为空(’\0’)或者出现读取文件错误。我们发现, 文件的光标在数据的最末端(’\0’),而使用close()之后,再打开再读取文件,发现文件的光标在数据开始端,所以这就是先close 后 read 的原因!
        每次读写完都要close open 文件,再下一步操作,这样不仅繁琐,还使代码冗杂,在这里介绍一个新函数 lseek()

在这里插入图片描述

lseek()
	fd:操作的文件的的文件描述符;
	offset:偏移量
	flag:移动标记,有以下几种:
		SEEK_SET:将该文件的偏移量设置为距文件开始处offset个字节;
		SEEK_CUR:将该文件的偏移量设置为当前值加offset个字节;
		SEEK_END:将该文件的偏移量设置为文件长度offset个字节;
	返回值:
		成功:返回值为偏移量大小
		失败:返回值为-1

代码演示

在这里插入图片描述
在这里插入图片描述

总结

       通过以上对五个文件常用操作函数的展示,想必大家对文件操作有了基本认识,对于open()函数有几个 flags 没有用到 比如O_TRUNC 、O_EXCL等,大家可以根据解释自行写代码实际操作。除此之外,学会使用 linux下 man 手册查询函数,获得更多函数的 用法和关键指令。
       增强编程能力,光看不行,动手最关键,最后总结出一片文章记录自己的学习过程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉迷学习的拿铁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值