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

类别:编程语言 点击:0 评论:0 推荐:

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


本文地址:http://com.8s8s.com/it/it27756.htm