题目:手动创建两个文本文件text1.txt,text2.txt,要求编程创建text3.txt,实现text1.txt和text2.txt文件中除去首行和末尾对应的数据相加,三个文本的内容如下
思路:打开两个文件,然后分别读取他们的数据,分别存放在两个缓存区当中,然后两个缓存区的数据相加,结果存到第三个缓存区,在把第三个缓存区的数据写入到第三个文件;
代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define SIZE 1024
int main()
{
int fd1 = open("text1.txt", O_RDONLY,0777);
if(fd1 == -1)
{
perror("open fd1");
return -1;
}
int fd2 = open("text2.txt", O_RDONLY,0777);
if(fd2 == -1)
{
perror("open fd2");
return -1;
}
int fd3 = open("text3.txt", O_RDWR|O_CREAT,0777);
if(fd3 == -1)
{
perror("open fd3");
return -1;
}
//读取text1内容:
char buf1[SIZE] = {0};
ssize_t ret1 = read(fd1, buf1, SIZE-1);
if(ret1 == -1)
{
perror("read");
return -1;
}
if(ret1 == 0) //返回值如果是0,表示已经读取到了文件的结尾;
{
printf("读取结束\n");
}
int len = strlen(buf1);
//printf("读取了%d 个字节 %s",ret,buf1);
printf("\n");
//读取text2内容:
char buf2[SIZE] = {0};
ssize_t ret2 = read(fd2, buf2, SIZE-1);
if(ret2 == -1)
{
perror("read");
return -1;
}
if(ret2 == 0) //返回值如果是0,表示已经读取到了文件的结尾;
{
printf("读取结束\n");
}
//printf("读取了%d 个字节 %s",ret,buf1);
printf("\n");
//给text3写数据;
int i ;
char buf3[SIZE] ={0} ;
for (i = 0;i < len;i++)
{
if(buf1[i] > '0' &&buf1[i] < '9')//判断是否是数字,是数字就相加
{
buf3[i] = buf1[i] + buf2[i]-'0';
}
else
{
buf3[i] = buf1[i];
}
}
ssize_t ret = write(fd3, buf3, strlen(buf3));
if (ret == -1)
{
perror ("write");
}
return 0;
}