功能: 文件内存储一个数字,该数字初始化为0;之后取出改数字对数字加3后再次写入文件;
期望结果:文件内数字初始化为0,可执行文件被执行一次,改数字变为3;执行两次,改数字变为6……
结果显示:
准备工作:
/*创建文件,存储值*/
# touch operation_log_id
/*文件内的值初始化为0*/
[root@localhost 20190613]# cat operation_log_id
0
代码如下:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int fd = 0;
char acBuf[4096] = {0};
int i = 0;
fd = open("./operation_log_id", O_RDWR|O_ASYNC);
if(-1 == fd)
{
printf("error!\n");
return 0;
}
/*读取文件的值*/
int iR = 0;
while(iR = read(fd, acBuf, sizeof(acBuf)-1))
{
//printf("###%s\n", acBuf);
break;
}
/*清空文件*/
ftruncate(fd, 0);
/*重新设置文件的偏移量*/
lseek(fd, 0, SEEK_SET);
/*对读取出来的数字进行加3操作,atoi为字符串转换为整数的函数*/
sprintf(acBuf, "%d", atoi(acBuf)+3);
/*写入文件*/
write(fd, acBuf, strlen(acBuf));
close(fd);
return 0;
}
解释说明:
若加清空文件,与重新设置文件偏移量。则数据会被覆盖;
否则,文件会被清空,值会更新。如上所示。