1.针对文件描述符的函数文件复制:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
/*使用几个文件操作函数所需要的头文件*/
#define MAXSIZE 1024
int main(int argc,char *argv[])
{
int from_fd;
int to_fd;
/*定义打开文件返回的文件描述符*/
int bytes_read;
int bytes_write;
/*定义读取和写入的字符数*/
char buf[MAXSIZE];
char *str;
if(argc != 3)
{
exit(1);
}
from_fd = open(argv[1],O_RDONLY); /*打开原文件,如果打开失败就退出*/
printf("from_fd = %d\n",from_fd);
if(from_fd == -1)
{
exit(1);
}
to_fd = open(argv[2],O_WRONLY|O_CREAT,0755); /*打开目标文件,如果不存在就创建,失败就退出*/
printf("to_fd = %d\n",to_fd);
if(to_fd == -1)
{
exit(1);
}
while((bytes_read = read(from_fd,buf,MAXSIZE))) /*循环的从原文件中读取MAXSIZE个字符,直到文件尾或 无字符可读*/
{
if(bytes_read > 0)
{
str = buf;
while((bytes_write = write(to_fd,str,bytes_read))) /*循环的将读取的字符写入到目标文件中,直到将读取到 的全部字符都写入*/
{
if(bytes_write == -1) /*如果写入失败,退出循环,从新写入*/
{
break;
}
else if(bytes_write == bytes_read) /*如果将读取的字符全部写入,退出循环*/
{
break;
}
else if(bytes_write > 0) /*如果读取的字符只写了一部分,继续写入,直到写 完为止*/
{
str = str + bytes_write;
bytes_read = bytes_read - bytes_write;
}
}
}
}
/*关闭两个文件*/
close(from_fd);
close(to_fd);
return 0;
}
2.针对流的函数文件复制:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*使用几个文件操作函数所需要的头文件*/
#define MAXSIZE 1024
int main()
{
/*定义两个文件流,一个为原文件流,一个为目标文件流*/
FILE *fp1;
FILE *fp2;
int num;
int num2;
int ff;
char str[MAXSIZE] = {0};
fp1 = fopen("copy_file.c","r+"); /*打开原文件,失败退出程序*/
if(NULL == fp1)
{
printf("fopen1 error!\n");
exit(1);
}
fp2 = fopen("to_copy.c","w+"); /*打开目标文件,失败退出程序*/
if(NULL == fp2)
{
printf("fopen2 error!\n");
exit(1);
}
while((ff = feof(fp1)) == 0) /*循环判断原文件文件是否到达文件尾,到达文件尾循环退出*/
{
num = fread(str,100,1,fp1); /*读取原文件的一个字符块,失败结束循环,从新读取*/
if(num < 0)
{
printf("fread error!\n");
break;
}
num2 = fwrite(str,100,1,fp2); /*将读取的原文件的字符块写入目标文件,失败结束循环,从新写入*/
if(num2 < 0)
{
printf("fwrite error!\n");
break;
}
memset(str,0,100); /*将读取字符块存放的地方清空*/
}
/*关闭两个文件*/
fclose(fp1);
fclose(fp2);
return 0;
}