(1) 实例源码file_copy.c
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#define BUFFER_SIZE 1024
int main(int argc, char *argv[])
{
int from_fd; /* 源文件描述符 */
int to_fd; /* 目的文件描述符 */
int bytes_read; /* 读到的字节数 */
int bytes_write; /* 写入的字节数 */
char buffer[BUFFER_SIZE]; /* 写文件时的缓冲区大小 */
char *ptr;
if( argc != 3 )
{
fprintf( stderr,"Usage:%s fromfile tofile\n",argv[0] );
exit(1);
}
/* 打开源文件*/
if( (from_fd = open(argv[1],O_RDONLY)) == -1 )
{
fprintf( stderr,"Open %s Error:%s\n",argv[1],strerror(errno) );
exit(1);
}
/* 打开目的文件,不存在的话就首先创建 */
if( (to_fd = open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR)) == -1 )
{
fprintf( stderr,"Open %s Error:%s\n",argv[2],strerror(errno) );
exit(1);
}
/* 经典的文件拷贝 */
while( bytes_read = read( from_fd,buffer,BUFFER_SIZE))
{
if( (bytes_read == -1)&&(errno != EINTR)) /* 一个致命的错误发生了 */
break;
else
if( bytes_read > 0 )
{
ptr = buffer;
while( bytes_write = write( to_fd,ptr,bytes_read ) )
{
if( (bytes_write == -1)&&(errno != EINTR) ) /* 一个致命的错误发生了 */
break;
else
if( bytes_write == bytes_read ) /* 写完了所有独读到的字节 */
break;
else
if(bytes_write > 0) /* 只写了一部分 */
{
ptr += bytes_write;
bytes_read -= bytes_write;
}
}
if(bytes_write == -1)
break;
}
}
close(from_fd);
close(to_fd);
exit(0);
}
(2)调试过程以及结果
①编译

②查看源文件(待拷贝文件)内容


③执行拷贝

④查看目的文件内容


本文详细介绍了文件拷贝源码file_copy.c的实现逻辑,包括编译、执行以及验证目的文件内容的过程。重点突出源文件、目的文件的操作,以及在拷贝过程中可能出现的错误处理。
1952

被折叠的 条评论
为什么被折叠?



