热门标签 | 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字符数组中的每个元素代表每个参数

 

 






推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 文件描述符、文件句柄与打开文件之间的关联解析
    本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
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社区 版权所有