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

很简单的一个例子,演示了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内核设计实习》里的一个作业,我会去试着做


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值