热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Linux系统中利用read和write函数实现文件复制操作

在Linux系统中,通过使用`read`和`write`函数可以实现文件的高效复制操作。`open`函数用于打开或创建文件,其返回值为文件描述符,成功时返回一个有效的文件描述符,失败时返回-1。`path`参数指定了要操作的文件路径,而`oflag`参数则定义了文件的打开模式和属性。此外,为了确保数据的完整性和一致性,还需要合理处理文件读取和写入过程中的错误和异常情况。

Open 函数

 

返回值:若成功,返回未见描述符;若出错,返回-1

 

Path参数是要打开或创建文件的名字。Oflag参数可用来说明此函数的多个选项。

下列一个或多个常量进行运算构成oflag参数(这些参数在头文件中定义)

必选项:

O_RDONLY 只读打开

O_WRONLY 只写打开

O_RDWR 读写打开

大多数情况下,将它们依次定义为0,1,2

可选项:

O_APPEND 每次写时都追加到文件的末端。

O_CREAT 若此文件不存在则创建它。

O_EXCL 若同时指定了O_CREAT,而文件已存在,则出错。

O_TRUNC 如果此文件存在,而且只写或读写存在,则将其长度截断为0

 

Read函数

 

返回值:读到的字节数,若已经到文件尾,返回0;若出错,返回-1

fd所指的文件传送count个字节到buf指针所指的内存中。若count=0,则read不会有作业并返回0

 

Write函数

 

返回值:若成功,返回已写的字节数;若出错,返回-1

将参数buf所指的内存中count个字节写入到参数fd所指的文件内。

 

Lseek函数

 

返回值:若成功,返回新的文件偏移量;若出错,返回为-1

对于参数offset的解释与whence的值有关。

1. 若whenceSEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节。

2. 若whenceSEEK_CUR,则将该文件的偏移量设置为其当前值加上offset,其可正可负。

3. 若whenceSEEK_END,则将该文件的偏移量设置为文件长度加上offset,其可正可负。

 

例如:

Lseek(int fd, 0, SEEK_SET);//定位到文件头

Lseek(int fd, 0, SEEK_END);//定位到文件尾

Lseek(int fd, 0, SEEK_CUR);//定位到文件当前位置

/*************************************************************************> File Name: copy_file.c> Author: > Mail: > Created Time: 2017年07月12日 星期三 16时52分32秒************************************************************************/
::
#include
#include
#include
#include
#include
#include
#include#define BUFFER_SIZE 1024int main( int argc,char **argv)
{int from_fd,to_fd;long file_len=0;int ret=1;char buffer[BUFFER_SIZE];char *ptr;//判断入参if(argc!=3){printf("Usage:%s fromfile tofile !\n",argv[0]);exit(1);}//打开源文件if( (from_fd = open(argv[1],O_RDONLY | O_CREAT ))==-1){printf("Open %s Error!\n",argv[1]);exit(1);}//创建目的文件if( (to_fd = open(argv[2], O_WRONLY | O_CREAT))==-1) {printf("Open %s error! \n",argv[2]);exit(1);}//测得文件大小file_len=lseek(from_fd,0,SEEK_END);lseek(from_fd,0,SEEK_SET);printf("from file size is %d!\n",file_len);//进行文件拷贝while(ret){ret = read(from_fd, buffer, BUFFER_SIZE);if(ret == -1){printf("read error!\n");exit(1);}write(to_fd, buffer, ret );file_len = ret;bzero( buffer, BUFFER_SIZE );}printf("there are %d buyes data left without copy!\n",file_len);close(from_fd);close(to_fd);exit(0);}

Int main(int argc,char **argv);

其中argc为运行命令行中输入参数的个数

Argv字符数组中的每个元素代表每个参数

 

 






推荐阅读
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 无论是计算机专业学生还是非计算机专业的学习者,在掌握C语言的过程中可能会遇到诸多挑战,不清楚从何入手。为此,本文系统地梳理了2019年福建省C语言的核心知识点,并结合最新的技术进展进行了详细总结,旨在为初学者提供全面的学习指导。文章不仅涵盖了基础语法和数据结构,还深入探讨了指针、内存管理和算法优化等高级主题,帮助读者快速提升编程能力。 ... [详细]
  • 本文详细介绍了在CodeUp平台中实现大数进制转换的技术方法。具体而言,该问题要求将一个最多包含30位数字的十进制非负整数转换为二进制表示。输入数据包含多行,每行包含一个不超过30位的十进制非负整数。通过高效的算法设计,确保了大数转换的准确性和性能。 ... [详细]
  • 在探讨P1923问题时,我们发现手写的快速排序在最后两个测试用例中出现了超时现象,这在意料之中,因为该题目实际上要求的是时间复杂度为O(n)的算法。进一步研究题解后,发现有选手使用STL中的`nth_element`函数成功通过了所有测试点。本文将详细分析这一现象,并提出相应的优化策略。 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
  • 具备括号和分数功能的高级四则运算计算器
    本研究基于C语言开发了一款支持括号和分数运算的高级四则运算计算器。该计算器通过模拟手算过程,对每个运算符进行优先级标记,并按优先级从高到低依次执行计算。其中,加减运算的优先级最低,为0。此外,该计算器还支持复杂的分数运算,能够处理包含括号的表达式,提高了计算的准确性和灵活性。 ... [详细]
  • 深入解析C语言中的动态规划算法:以背包问题为例
    本文深入探讨了C语言中动态规划算法的应用,以经典的背包问题为例进行详细解析。通过实例分析,展示了如何利用动态规划解决复杂优化问题,并提供了高效的代码实现方法。文章不仅涵盖了算法的基本原理,还讨论了其在实际编程中的应用技巧和优化策略,为读者提供了全面的理解和实践指导。 ... [详细]
  • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 题目链接: Caninepoetry问题概述:给定一个仅包含小写字母的字符串,允许将任意位置的字符修改为任意其他小写字母。目标是通过最少次数的修改,使字符串中所有长度大于1的子串均满足特定条件。本文详细分析了该问题,并运用思维与贪心算法,提出了一种高效解决方案。通过对字符串的深入解析,我们探讨了如何在最小化修改次数的同时,确保所有子串符合要求。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 本文探讨了在硬币找零问题中使用枚举法的具体应用。具体而言,题目要求将一定数额的零钱换成5分、2分和1分的硬币,并且每种硬币至少需要使用一枚。研究旨在找出所有可能的换法组合。输入数据为一行,包含一个在8到100之间的整数,表示待换的零钱数额。通过详细的枚举分析,本文提供了高效的解决方案,并验证了其在实际应用中的可行性和有效性。 ... [详细]
  • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
author-avatar
DCPe-苦乐年华
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有