`
fp_moon
  • 浏览: 977738 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux下C语言实现文件拷贝--转

 
阅读更多

Linux下C语言实现文件拷贝

/*

   Function:copy file from file1 to file2

   How to execute: ./copyfile file1 file2   (under Linux)

   Data:2007-05-09

*/

 

#include <stdio.h>      /*fprintf(),stderr,BUFSIZ*/

#include <stdlib.h>     /**/

#include <string.h>     /*stderror()*/

#include <fcntl.h>      /*open(),flag*/

#include <errno.h>      /*errno*/

#include <unistd.h>     /*ssize_t*/

#include <sys/types.h>

#include <sys/stat.h>   /*mode_t*/

 

#define BUFFER_SIZE 3

 

int main(int argc,char **argv)

{

   int from_fd,to_fd;

   int bytes_read,bytes_write;

   char buffer[BUFFER_SIZE];

   char *ptr;

 

   if(argc!=3)

   {

     fprintf(stderr,"Usage:%s fromfile tofile\n\a",argv[0]);

     exit(1);

   }

 

   /* 打开源文件 */

   if((from_fd=open(argv[1],O_RDONLY))==-1)   /*open file readonly,返回-1表示出错,否则返回文件描述符*/

   {

     fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));

     exit(1);

   }

 

   /* 创建目的文件 */

   /* 使用了O_CREAT选项-创建文件,open()函数需要第3个参数,

      mode=S_IRUSR|S_IWUSR表示S_IRUSR 用户可以读 S_IWUSR 用户可以写*/

   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);

   return;

分享到:
评论

相关推荐

    Linux下C语言实现文件拷贝

    ### Linux下C语言实现文件拷贝 #### 一、引言 在计算机编程领域,特别是在系统级编程中,文件操作是非常基础且重要的功能之一。在Linux环境下,利用C语言进行文件操作具有高度的灵活性和效率。本文将详细介绍如何在...

    Linux下C语言,拷贝目录树

    根据提供的文件信息,本文将详细解释如何在 Linux 下使用 C 语言实现目录树的拷贝。这涉及到对 Linux 文件系统的基本理解以及多个 C 语言库函数的使用。 ### Linux 文件结构与目录树拷贝 #### Linux 文件系统简介 ...

    Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下

    Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下,目录复制采用树深度优先策略。

    CP命令实现(linux下C语言)edsionte.com

    linux下C语言实现cp命令。主要功能有: 1.将一个文件拷贝到指定路径。(目的文件可存在也可不存在)。这是my_cp中最基本的功能,事实上2,3,4功能最终都会被分解成此功能。 2.将一个目录拷贝到指定目录下,此时...

    linux下C语言开发笔记整理

    网络编程是Linux下C语言开发的核心内容之一,涉及套接字编程,用于实现网络通信。了解TCP/IP协议栈以及如何使用套接字API(如`socket`、`bind`、`listen`、`accept`、`connect`、`send`和`recv`)进行网络数据的发送...

    linux C语言 文件夹复制

    在Linux系统中,使用C语言实现文件夹复制是一项常见的任务,尤其对于系统级编程和文件管理应用程序来说。这里我们将深入探讨如何使用C语言在Linux环境下完成这个任务,以及相关的技术要点。 首先,我们需要理解...

    零拷贝源代码

    1. **内存映射文件(MMap)**:在Linux系统中,零拷贝经常通过内存映射文件实现。它允许用户空间直接访问内核的文件缓冲区,从而避免了数据在用户空间和内核空间之间的拷贝。当读取文件时,系统会将磁盘上的数据映射到...

    文件目录拷贝

    Linux下C语言实现Copy复制命令

    Linux操作系统原理与应用--陈莉君

    文档中给出了一个简单的拷贝命令实现的C语言代码段,说明了程序是如何通过操作系统调用文件系统操作的。 从硬件的角度来看,操作系统是用户程序运行的基础,负责管理CPU、内存和I/O接口硬件资源。文档中提到一个...

    SHA-3 加密算法C语言测试代码-(基于Keccak算法)

    将整个文件夹拷贝到Linux目录下,使用gcc编译 编译运行步骤: 1、在本文件夹目录下使用Linux命令行输入 make 进行编译链接生成可执行文件HashCalc 2. 命令行下输入 ./HashCalc 执行程序 3.命令行输入make clean可...

    华中科技大学操作系统课程设计——1.系统调用实现文件拷贝

    华中科技大学操作系统课程设计专用,内含5个部分: 1.1 利用系统调用实现文件拷贝(含代码和makefile) 1.2 多进程编程,实现三个子...说明:本内容尝试实现更加底层的系统调用,而不是用C语言中的文件操作实现文件拷贝

    C语言实现简单线程池.zip

    在本项目"简单线程池"中,我们将重点探讨如何用C语言在Linux环境下实现这样一个线程池系统,特别是关注其核心组件和设计原则。 首先,线程池的核心概念是线程复用,通过预先创建一组线程,可以避免频繁地创建和销毁...

    C语言文件复制实例详解

    C语言文件复制实例详解 C语言文件复制实例详解是指使用C语言编写的文件复制程序,能够将源文件复制到目标文件中。该实例详解了C语言文件复制的相关知识点,包括文件操作、输入输出流、错误处理等。 1. 文件操作 ...

    Linux下C语言编程——线程

    下面这个程序可以实现当前目录下的所有文件备份。备份后的后缀名为 bak。 #include #include #include #include #include #include #include #include #define BUFFER 512 struct copy_file { int in...

    Linux C大文件的创建和读写速率

    本篇将详细介绍如何在Linux下使用C语言创建和读写大文件,并探讨如何优化读写速率。 1. **大文件限制**: 在32位系统中,标准的`stdio.h`库函数如`fopen`、`fwrite`和`fread`受限于2GB文件大小。为处理大于2GB的...

    实验四-Linux下的C语言编程.doc

    本次实验的主要目的是让学生在Linux/UNIX环境下,利用C语言实现特定的功能,通过实际编程加深对操作系统中文件操作的理解,尤其是熟悉与文件系统相关的系统调用。实验分为两个部分,第一部分是实现`copy`命令,用于...

    Linux线程池目录拷贝

    通过这个项目,你可以学习到如何在Linux环境下实现线程池,如何进行目录遍历和文件I/O操作,以及如何在多线程环境中进行并发控制。这不仅有助于提升编程技能,还对理解操作系统内核的工作原理和优化程序性能有深远...

    cp.tar.gz_linux copyfile_拷贝文件

    本压缩包包含了两个关键文件:`cp.c`和`dircp`,它们是用C语言编写的程序,用于在Linux环境下实现文件和目录的复制功能。 `cp.c`文件很可能是实现了一个命令行工具,它模仿了Linux内置的`cp`命令。`cp`命令是Linux...

    linux 系统调用 实现文件复制

    1. **编写C程序实现文件拷贝** - **方法概述**:使用`fgetc`函数逐个字符地读取源文件,并通过`fputc`函数将字符写入目标文件。 - **源码分析**:给出的示例代码展示了如何打开两个文件(一个用于读取,另一个用于...

    linux c语言函数速查手册

    在Linux环境下,C语言的开发通常使用GCC编译器进行编译和链接。 二、标准库函数 1. 输入/输出函数:如`printf`和`scanf`用于格式化输入输出,`getchar`和`putchar`用于字符输入输出。 2. 字符处理:`isalpha`、`...

Global site tag (gtag.js) - Google Analytics