主函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
int main()
{
int fd1;
int fd2;
int fd3;
int n_read1;
int n_read2;
int data1[4];
int data2[4];
int data3[4];
char buffer1[1024];
char buffer2[1024];
char buffer3[1024];
if((fd1 = open("test1.txt",O_RDONLY)) == -1)
{
perror("open file error!");
exit(1);
}
if((fd2 = open("test2.txt",O_RDONLY)) == -1)
{
perror("open file error!");
exit(1);
}
if((fd3 = open("text3.txt",O_CREAT | O_WRONLY,0655)) == -1)
{
perror("open file error!");
exit(1);
}
memset(buffer1,0,sizeof(buffer1));
memset(buffer2,0,sizeof(buffer2));
n_read1 = read_line(fd1,buffer1,sizeof(buffer1));
n_read2 = read_line(fd2,buffer2,sizeof(buffer2));
if((strcmp(buffer1,"begin")) == 0 && (strcmp(buffer2,"begin") == 0))
{
write(fd3,buffer1,strlen(buffer1));
write(fd3,"\n",1);
}
else
{
printf("begin is not find!\n");
goto error;
}
while(1)
{
memset(buffer1,0,sizeof(buffer1));
memset(buffer2,0,sizeof(buffer2));
memset(buffer3,0,sizeof(buffer3));
n_read1 = read_line(fd1,buffer1,sizeof(buffer1));
n_read2 = read_line(fd2,buffer2,sizeof(buffer2));
if(n_read1 == 0 || n_read2 == 0)
{
break;
}
if((strcmp(buffer1,"end")) == 0 && (strcmp(buffer2,"end") == 0))
{
write(fd3,buffer1,strlen(buffer1));
printf("copy data is over!\n");
break;
}
parse_str(data1,buffer1);
//printf("buffer1 = %s\n",buffer1);
//printf("data[0]:%d data[1]:%d data[2]:%d data[3]:%d\n",data1[0],data1[1],data1[2],data1[3]);
parse_str(data2,buffer2);
//printf("buffer2 = %s\n",buffer2);
//printf("data[0]:%d data[1]:%d data[2]:%d data[3]:%d\n",data2[0],data2[1],data2[2],data2[3]);
add_sum(data1,data2,data3);
printf("data[0]:%d data[1]:%d data[2]:%d data[3]:%d\n",data3[0],data3[1],data3[2],data3[3]);
data_to_str(data3,buffer3);
//printf("buffer3 = %s\n",buffer3);
//printf("data[0]:%d data[1]:%d data[2]:%d data[3]:%d\n",data3[0],data3[1],data3[2],data3[3]);
write(fd3,buffer3,strlen(buffer3));
write(fd3,"\n",1);
}
error:
return 0;
}//
read_line:
int read_line(int fd, char *buffer, int max_len)
{
int i;
int n_read;
char temp;
for(i = 0; i < max_len; i++)
{
n_read = read(fd,&temp,1);
if(n_read == -1)
{
perror("read error!");
exit(1);
}
if(n_read == 0)
{
return 0;
}
if(temp == '\n')
{
return i;
}
else
{
buffer[i] = temp;
}
}
return i;
}///
parse_str:
#include <stdlib.h>
#include <string.h>
void parse_str(int *data, char *src)
{
int i = 0;
int len = 0;
char *temp = (char *)malloc(sizeof(char) * 100);
while(*src != '\0')
{
if(*src == ' ')
{
strncpy(temp,src - len,len);
data[i] = atoi(temp);
i++;
len = 0;
}
else
{
len++;
}
src++;
}
strncpy(temp,src - len,len);
data[i] = atoi(temp);
}
int2str:
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1024
void reverse_string(char *s1, int len)
{
int i;
char temp;
for(i = 0; i < len / 2; i++)
{
temp = *(s1 + i);
*(s1 + i) = *(s1 + len - 1 - i);
*(s1 + len - 1 - i) = temp;
}
}
char * int2str(int num)
{
int i = 0;
char temp;
static char result[MAX_SIZE];
while(num > 0)
{
temp = (num % 10) + '0';
result[i] = temp;
num = num / 10;
i++;
}
result[i] = '\0';
reverse_string(result,strlen(result));
return result;
}
/
data_to_str:
#include <string.h>
void data_to_str(int *data, char *src)
{
int i;
for(i = 0; i < 3; i++)
{
strcat(src,int2str(data[i]));
strcat(src," ");
}
strcat(src,int2str(data[i]));
}
add_sum:
int add_sum(int *data1, int *data2, int *sum)
{
int i;
for(i = 0; i < 4; i++)
{
sum[i] = data1[i] + data2[i];
}
}