Linux系统文件的读写(三)

本文详细介绍了open函数的O_APPEND和O_TRUNC选项,creati函数与open的关系,write和read用于标准输入输出,以及cp函数的使用。还探讨了如何修改配置文件和处理复杂数据类型的编码问题。
摘要由CSDN通过智能技术生成

一、open函数增加的地方

以上O_APPEND权限的意思是:在文件的末尾添加字符串buf的值,如果把该权限去掉,文件只有O_RDWR权限的话,所写的字符串是在文件的开头添加字符串buf的值,会把之前的数据全都覆盖掉,这并不是我们所想要的数据。

如果原来的数据长度大于buf字符串的长度,后面没有覆盖完的数据保留。

如上图,添加O_TRUNC权限,意思就是说把该文件里面所有的数据清空,然后再填写buf字符串中的数据。

二、create函数的用法

open函数:打开和创建文件。

creat函数:创建一个文件并以只写的方式打开。如果原来该文件存在,会将这个文件的长度截短为0。

creat函数完全可以被open函数替代。

creat函数定义

#include <fcntl.h>

int creat(const char *pathname, mode_t mode);

当creat的文件已存在时,creat将截断文件原文件,文件的修改时间访问时间也一并被修改。

creat的功能相当于:open (pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);

以下是creat函数 的主要参数及其解释:

三、write和read函数实现标准输入输出

read(0,readbuf,3); //参数0表示输入,从键盘中3个输入数据到readbuf里面,
write(1,readbuf,strlen(readbuf));//参数1表示输出,将readbuf里面的数据输出并且显示,如下所示:

如果第一个参数是2 的话就是说明是标准错误

四、cp函数的用法

打开原文件.c------>将内容读取到buf缓存中------->将buf缓存中里面的内容放到目的文件.C------>关闭这两个文件。

编译后,运行的时候后面要加2个参数,分别是原文件和目的文件

五、修改配置文件的参数

首先创建一个新的配置文件,如下:

在其里面随便写入以下参数:

之后的具体操作如下:

打开其文件--------->计算文件的大小好知道后面需要开辟多少空间---------->开辟空间,并且将数据读取到其里面----->利用strstr函数找到需要操作的地方------------>修改值(这里所说的修改值是在新开辟的空间里面修改)----------->将缓存区的数据写入到配置文件中。(注:本次操作只能是字符)

如果想操作整形或者其他的数据类型,我们可以定义一个结构体,里面有整型、字符型等等数据类型,这里我简单设置的一个整型和字符型结构体。

具体思路如下:

初始化结构体数据------>打开文件----->将结构体数据写入到文件中------>调用lseek函数使得光标移动到最前面------>再读取数据,用printf函数打印一下发现是正确的,但是进入文件后发现数据是乱码的,如下:

这个原因可能是有什么加密吧,但是数据是确实写入进去了。

源代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>


struct Test
{
        int a;
        char b;
};

int main()
{
        int fdSrc;
        struct Test test1={100,'q'};
        struct Test test2;
        fdSrc=open("./file",O_RDWR);
        int size_write=write(fdSrc,&test1,sizeof(struct Test));
        lseek(fdSrc,0,SEEK_SET);

        int size_read=read(fdSrc,&test2,sizeof(struct Test));
        printf("%d,%c\n",test2.a,test2.b);
        return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值