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 文件结构与目录树拷贝 #### Linux 文件系统简介 ...
Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下,目录复制采用树深度优先策略。
linux下C语言实现cp命令。主要功能有: 1.将一个文件拷贝到指定路径。(目的文件可存在也可不存在)。这是my_cp中最基本的功能,事实上2,3,4功能最终都会被分解成此功能。 2.将一个目录拷贝到指定目录下,此时...
网络编程是Linux下C语言开发的核心内容之一,涉及套接字编程,用于实现网络通信。了解TCP/IP协议栈以及如何使用套接字API(如`socket`、`bind`、`listen`、`accept`、`connect`、`send`和`recv`)进行网络数据的发送...
在Linux系统中,使用C语言实现文件夹复制是一项常见的任务,尤其对于系统级编程和文件管理应用程序来说。这里我们将深入探讨如何使用C语言在Linux环境下完成这个任务,以及相关的技术要点。 首先,我们需要理解...
1. **内存映射文件(MMap)**:在Linux系统中,零拷贝经常通过内存映射文件实现。它允许用户空间直接访问内核的文件缓冲区,从而避免了数据在用户空间和内核空间之间的拷贝。当读取文件时,系统会将磁盘上的数据映射到...
Linux下C语言实现Copy复制命令
文档中给出了一个简单的拷贝命令实现的C语言代码段,说明了程序是如何通过操作系统调用文件系统操作的。 从硬件的角度来看,操作系统是用户程序运行的基础,负责管理CPU、内存和I/O接口硬件资源。文档中提到一个...
将整个文件夹拷贝到Linux目录下,使用gcc编译 编译运行步骤: 1、在本文件夹目录下使用Linux命令行输入 make 进行编译链接生成可执行文件HashCalc 2. 命令行下输入 ./HashCalc 执行程序 3.命令行输入make clean可...
bin目录下即可,为测试webadmin.cgi,还需将htdocs目录下的文件拷贝到apache的WEB根目录下,将etc目录中的所有文件拷贝到根目录下的etc中,最后用浏览器访问你的apache Web服务器即可看到Linux系统的WEB管理界面。...
在本项目"简单线程池"中,我们将重点探讨如何用C语言在Linux环境下实现这样一个线程池系统,特别是关注其核心组件和设计原则。 首先,线程池的核心概念是线程复用,通过预先创建一组线程,可以避免频繁地创建和销毁...
C语言文件复制实例详解 C语言文件复制实例详解是指使用C语言编写的文件复制程序,能够将源文件复制到目标文件中。该实例详解了C语言文件复制的相关知识点,包括文件操作、输入输出流、错误处理等。 1. 文件操作 ...
下面这个程序可以实现当前目录下的所有文件备份。备份后的后缀名为 bak。 #include #include #include #include #include #include #include #include #define BUFFER 512 struct copy_file { int in...
本篇将详细介绍如何在Linux下使用C语言创建和读写大文件,并探讨如何优化读写速率。 1. **大文件限制**: 在32位系统中,标准的`stdio.h`库函数如`fopen`、`fwrite`和`fread`受限于2GB文件大小。为处理大于2GB的...
本次实验的主要目的是让学生在Linux/UNIX环境下,利用C语言实现特定的功能,通过实际编程加深对操作系统中文件操作的理解,尤其是熟悉与文件系统相关的系统调用。实验分为两个部分,第一部分是实现`copy`命令,用于...
通过这个项目,你可以学习到如何在Linux环境下实现线程池,如何进行目录遍历和文件I/O操作,以及如何在多线程环境中进行并发控制。这不仅有助于提升编程技能,还对理解操作系统内核的工作原理和优化程序性能有深远...
本压缩包包含了两个关键文件:`cp.c`和`dircp`,它们是用C语言编写的程序,用于在Linux环境下实现文件和目录的复制功能。 `cp.c`文件很可能是实现了一个命令行工具,它模仿了Linux内置的`cp`命令。`cp`命令是Linux...
1. **编写C程序实现文件拷贝** - **方法概述**:使用`fgetc`函数逐个字符地读取源文件,并通过`fputc`函数将字符写入目标文件。 - **源码分析**:给出的示例代码展示了如何打开两个文件(一个用于读取,另一个用于...
在Linux环境下,C语言的开发通常使用GCC编译器进行编译和链接。 二、标准库函数 1. 输入/输出函数:如`printf`和`scanf`用于格式化输入输出,`getchar`和`putchar`用于字符输入输出。 2. 字符处理:`isalpha`、`...