linux下使用系统调用编程实现copy命令功能

原创 2004年09月09日 12:52:00

很简单的一个例子,演示了linux的一些对于文件操作的系统调用,并且演示了一个copy文件的经典算法

程序是从http://www.fanqiang.com/网站上摘录,那里有很多好文章

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>

 

#define BUFFER_SIZE 1024

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

 

写到这里,我突发奇想,完全可以自己做一个shell,实现基本的功能,这也是《linux内核设计实习》里的一个作业,我会去试着做


cp命令的编写——浅谈系统调用

摘要:linux中cp命令的实现,通过这个程序,我们需要了解系统调用耗费时间的方面,同时学会系统调用的错误处理机制。...
  • trochiluses
  • trochiluses
  • 2013年09月05日 08:45
  • 1800

Linux&C编程之Linux系统命令“ls -l”的简单实现

一、基础知识:1、获取文件详细信息的函数:(1)、获取文件信息的函数:#include int stat(const char * path,struct stat * buf);/*将path参数(...
  • Apollon_krj
  • Apollon_krj
  • 2017年01月24日 21:15
  • 2721

Linux操作系统下,通过系统调用和库函数分别实现对文件的拷贝

通过系统调用实现 file.copy 通过库函数实现 file.copy
  • Crazy_Tengt
  • Crazy_Tengt
  • 2017年06月06日 22:01
  • 159

linux编程学习6-文件操作之用open、read、write实现文件复制拷贝功能

一、基本概念和常识 1.linux系统中,几乎一切都是文件,所以程序可以像使用文件那样使用打印机,磁盘文件,串行口和其它设备 2.linux系统中,比较重要的文件设备有三个: /dev/console...
  • d704791892
  • d704791892
  • 2015年06月06日 23:11
  • 3006

Linux下系统调用的实现

Linux下系统调用的实现 Unix/Linux操作系统的体系结构及系统调用介绍 什么是操作系统和系统调用     操作系统是从硬件抽象出来的虚拟机,在该虚拟机上用户可以运行应用...
  • farmwang
  • farmwang
  • 2016年08月27日 22:46
  • 1385

linux采用编译内核的方法增加系统功能调用

最近做了我们院的操作系统课程设计,本来是想把我的报告拿出来和大家分享的,可寝室的朋友说我这么做容易使后来的童鞋不经过自己的思考就全盘copy,所以我决定还是分类讲讲我做的过程吧!首先完成的是一个lin...
  • XingKong_678
  • XingKong_678
  • 2014年10月24日 16:54
  • 1173

Linux下简单的系统调用

嵌入式汇编实现简单的系统调用
  • ven_kon
  • ven_kon
  • 2017年03月17日 21:31
  • 223

实现一个简单类似linux上cat命令的功能函数

/*  *   写一个能查看其他文件的功能  *       cat  */ #include         /* * 写一个能查看其他文件的功能 * cat */ #inc...
  • qq_32744005
  • qq_32744005
  • 2016年05月09日 14:57
  • 1297

Linux编程中的程序调用方法(附:自己来写个伪命令行?)

system系统调用:通过fork一个新的进程来执行参数中的命令,执行完毕返回阻塞的源程序 system("./test -a 3 -d"); execv代替调用:通过把新的程序代替源程序继续...
  • wuchunlai_2012
  • wuchunlai_2012
  • 2016年01月28日 15:38
  • 854

Linux编程实现一个简单的Shell

在linux中实现一个简单的命令解释程序,功能要求: 1)同时支持内部命令和外部命令,内部命令支持两个(cd、exit) 2)支持后台命令 首先解释一下上面的两个要求,实际上是三种情况: 1.如果是...
  • whoami021
  • whoami021
  • 2013年12月22日 21:31
  • 2102
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下使用系统调用编程实现copy命令功能
举报原因:
原因补充:

(最多只允许输入30个字)