(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)调试过程以及结果
①编译
②查看源文件(待拷贝文件)内容
③执行拷贝
④查看目的文件内容
分享到:
相关推荐
Linux原理与应用——专题3:中断与系统调用.ppt
华中科技大学操作系统课程设计专用,内含5个部分: 1.1 利用系统调用实现...5 虚拟文件系统(实现的比较简单)(含代码和makefile) 说明:本内容尝试实现更加底层的系统调用,而不是用C语言中的文件操作实现文件拷贝
linux文件操作之系统调用。开始介绍了系统调用和库函数的区别,其次介绍了各种常用系统调用,其格式:头文件+函数原型+参数解析+返回值+具体实例。文档最后含一段小代码:用系统函数实现文件拷贝功能。
Linux系统编程——系统调用之 I/O 操作(文件操作),相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45868273
编写带缓存的文件操作类 从执行体程序库中的CLLogger类可知,通过缓存要写入文件中的数据,能够提高读写磁盘的性能 请编写一个文件操作的封装类,其要求如下: 需要提供open/read/write/lseek/close等函数的封装函数...
【Linux环境编程入门】四、文件操作的系统调用 - 源代码
Linux命令行与shell脚本编程、Linux C库函数及系统调用编程、Linux内核分析即应用、Debian(Ubuntu、Deepin)操作系统爬坑.zip Linux命令行与shell脚本编程、Linux C库函数及系统调用编程、Linux内核分析即应用、...
Linux进程管理、系统调用、文件系统:Linux进程管理、系统调用、文件系统
Linux命令行与shell脚本编程、Linux C库函数及系统调用编程、Linux内核分析即应用、Debian(Ubuntu、Deepin)操作系统爬坑.zip Linux命令行与shell脚本编程、Linux C库函数及系统调用编程、Linux内核分析即应用、...
系统调用的库函数就是读者使用的操作系统提供的 API(应用程序编程接口), API 只是函数定义。系统调用是通过软中断向内核发出了中断请求, int 指令的执行就会触发一个中断请求。 libc 函数库定义的一些 API 内部...
Linux 系统调用与实例分析 讲解了Linux系统中的系统调用实例
19——Linux的系统调用与文件IO(二)
[第2讲]库文件创建和调用——高级应用flv,[第2讲]库文件创建和调用——高级应用。查看更多
Linux系统调用的编程技术,添加一个自定义系统调用
linux系统编程linux系统编程linux系统编程linux系统编程linux系统编程linux系统编程linux系统编程
学习Linux系统编程C语言是基础,能够在Linux系统下通过指令完成文件的创建、复制、剪切、删除;文件夹的创建和删除;软件的下载和安装就可以。 Linux系统编程主要是学习Linux系统调用的接口,学习这些接口的功能、...
《LINUX系统编程》讲述了:在某些时刻,几乎所有的程序员都要与其程序所处操作系统中的系统调用和程序库打交道。《LINUX系统编程》主要讨论如何编写Linux系统软件——代码位于底层,并且直接跟内核及核心系统程序库...
1.实验内容与目的 熟悉有关文件的系统调用,学习文件系统的系统调用命令,提高对文件系统实现功能的理解和掌握。使用creat open read write 等系统调用用C语言编程实现复制文件。