一、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;
}