linux文件编程

目录

一、打开创建文件

1、open函数原型

2.参数说明:

2.1、O-CREAT  

2.1.1、打开一个已存在的文件

2.1.2、打开一个不存在的文件

2.2、O_EXCL

2.3、O_APPEND

2.4、O_TRUNC

2.5、creat函数

2.5.1、函数原型:

2.5.2、参数说明:

2.5.3、程序演示:

二、文件写入操作

1、函数原型

2、参数说明:

3、程序演示​编辑

三、文件读取操作:

1、函数原型:

2、参数说明:

3、程序演示:

四、lseek光标移动操作

1、函数原型:

2、参数说明:

2.1、SEEK_SET应用实例:

​编辑2.2、SEEK_CUR应用实例:

2.3、SEEK_END应用实例:

五、cp指令的实现

1、整体思路:

2、程序演示:

2.1、创建程序:

2.2、命令的使用:

六、文件修改和写入

1、strstr函数

1.1、函数原型:

1.2、参数说明: 

1.3、程序演示:

2、写入一个整型数到文件

3、写入一个结构体数组到文件


目录

一、打开创建文件

1、open函数原型

2.参数说明:

2.1、O-CREAT  

2.1.1、打开一个已存在的文件

2.1.2、打开一个不存在的文件

2.2、O_EXCL

2.3、O_APPEND

2.4、O_TRUNC

2.5、creat函数

2.5.1、函数原型:

2.5.2、参数说明:

2.5.3、程序演示:

二、文件写入操作

1、函数原型

2、参数说明:

3、程序演示​编辑

三、文件读取操作:

1、函数原型:

2、参数说明:

3、程序演示:

四、lseek光标移动操作

1、函数原型:

2、参数说明:

2.1、SEEK_SET应用实例:

​2.2、SEEK_CUR应用实例:

2.3、SEEK_END应用实例:

五、cp指令的实现

1、整体思路:

2、程序演示:

2.1、创建程序:

2.2、命令的使用:


一、打开创建文件

1、open函数原型

2.参数说明:

pathname:要打开的文件名(含路径)

flags : O_RDONLY 只读打开,O_WRONLY 只写打开,O_RDWR 可读可写打开

当我们附带了权限后,打开的文件就只能按照这种权限来操作。

以上这三个参数中应当只指定一个。下列参数是可选择的:

O-CREAT    :若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode.用其说明该新文件的存取许可权限。
O_EXCL      :以这种属性去打开文件时,如果同时指定了O_CREAT,而文件已经存在,则打开文件失败。
O_APPEND :以这种属性去打开文件时,每次写时都加到文件的尾端,正常写入没有加其他条件的话,原来文件中的数据内容会被覆盖,没有覆盖的会保留。
O_TRUNC   :以这种属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0,就是新数据替换旧数据。
Mode:一定是在flags中使用了 O-CREAT 标志,mode 记录待创建的文件的访问权限。


2.1、O-CREAT  
2.1.1、打开一个已存在的文件

如上图:若打开一个已存在的文件,返回值是3,若打开一个不存在的文件,则返回值是-1。

2.1.2、打开一个不存在的文件

如上图:打开当前路径下一个文件,若文件不存在,则创建一个权限为0600的文件,这里0600是文件所有者一个可读可写的权限,即file1权限为可读可写。

2.2、O_EXCL

以这种属性去打开文件时,如果同时指定了O_CREAT,而文件已经存在,则打开文件失败。返回值为-1,正常打印出“file have been” ,O_EXCL就是检查文件是否存在。

2.3、O_APPEND

程序创建前,先创建一个文件file1,并在里面随便写入数据,运行此程序,发现文件file1里的数据尾端插入了“ganjiuwanle”。

2.4、O_TRUNC

程序创建前,先创建一个文件file1,并在里面随便写入数据,运行此程序,发现文件file1里的数据被替换成test。这就是O_TRUNC的作用。

2.5、creat函数
2.5.1、函数原型:

2.5.2、参数说明:
S_IRUSR 4可读
S_IWUSR 2可写
S_IXUSR 1可执行
S_IRWXU 7可读、写、执行
2.5.3、程序演示:

       如上图:creat函数会在改目录下创建一个file1文件,文件的属性为可读可写可执行。

二、文件写入操作

1、函数原型

2、参数说明:

int fd :文件描述符
const void *buf :一个无类型的指针buf,是一个缓冲区
size_t count:你要写入文件的大小

返回值:如果成功,将返回写入的字节数 (0表示没有写入任何内容)。出现错误时,返回-1,并适当地设置errno

3、程序演示

三、文件读取操作:

1、函数原型:

2、参数说明:

int fd :文件描述符
const void *buf :一个无类型的指针buf,是一个缓冲区
size_t count:你要写入文件的大小

3、程序演示:

如上图:如果不在write后关闭文件,再重新打开,则光标就会停留在数据尾部,这样会造成数据无法读取,关闭文件后再打开,光标就会回到数据头部,数据就会成功读取。

四、lseek光标移动操作

1、函数原型:

2、参数说明:
int fd :文件描述符
off_t offset:偏移多少个字节
int whence:光标偏移位置

其中关于off_t offset的偏移方向:正值表示向前偏移(比如从当前位置向文件尾部方向偏移一定字节数),负值表示向后偏移(从当前位置向文件头部方向偏移一定字节数)。

SEEK_SET:光标偏移到头       SEEK_CUR:光标为当前位置       SEEK_END:光标偏移到末尾

lseek(fd,0,SEEK_SET)光标移动到头后,相对头偏移0个字节位置
lseek(fd,0,SEEK_END)        常用于计算文件大小
lseek(fd,-8,SEEK_END)   将光标移动到尾巴后,相对尾巴向头偏移8个字节
lseek(fd,-8,SEEK_CUR)光标移动到当前位置,相文件头部方向偏移8个字节

返回值:Iseek()返回从文件开始的偏移位置(以字节为单位)【就是返回偏移了多少个字节】。发生错误时,返回值(off_t) -1,并设置errno来指示错误。

2.1、SEEK_SET应用实例:
2.2、SEEK_CUR应用实例:

2.3、SEEK_END应用实例:

下图是利用lseek函数的返回值来计算文件大小。定义一个整形数filesize接收lseek的返回值,从而计算出文件的大小。

五、cp指令的实现

1、整体思路:

例如在linux中 cp test.c test1.c ,我们完成了test.c的文件复制。将其文件内容复制到test1.c。那如果我们不用cp指令如何实现复制。

  • 首先打开或者创建一个我们要复制的那个文件 例如Src。
  • 读取这个文件的数据,存储在数组Buf中。
  • 打开或者创建一个复制后的文件 例如Des。
  • 将读取到的数据写入到test1.c中。
  • 最后关闭这两个文件。
2、程序演示:
2.1、创建程序:

2.2、命令的使用:

gcc demo12.c -o mycp 生成可执行文件mycp 相当于linux中的cp指令

./mycp test.c test1.c  运用mycp完成文件数据的复制。

即便要复制的文件中已存在数据,并且数据比源文件多,当我们调用了O_TRUNC,数据也能完美的复制过来。

六、文件修改和写入

1、strstr函数
1.1、函数原型:

1.2、参数说明: 
  • haystack – 要被检索的 C 字符串。
  • needle – 在 haystack 字符串内要搜索的小字符串。
  • 返回值:该函数返回在 haystack 中第一次出现 needle 字符串的位置(该字符串前面),如果未找到则返回 null。

首先我们要先创建一个TEST.config文件 内容如下:

SPEED=3

LENG=1

SCORE=9

LEVEL=5

1.3、程序演示:

如上图:修改后TEST.config文件中数据如下:

SPEED=3

LENG=5

SCORE=9

LEVEL=5

2、写入一个整型数到文件

函数原型:

首先我们要创建一个空文件file1,方便数据写入。

代码演示:

这里file1中的数据不是乱码,是计算机可以看懂的编码,且编译运行程序可以正常读出:read 100

3、写入一个结构体数组到文件

如上图:编译运行程序后,结构体数组里数据正常读出,且file中数据正常写入,编码为计算机可以看懂的语言。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值