linxu系統調用實現cp函數

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

#define BUFSIZE 1024

int main(int argc,char *argv[])
{
       if(argc < 3) {
               fprintf(stderr,"Usage:%s <src> <dst>\n",argv[0]);
               exit(1);
       }

       int fds,fdd,len,pos,ret;
       char buf[BUFSIZE];
       fds=open(argv[1],O_RDONLY);
       if(fds < 0) {
               perror("open():");
               exit(1);
       }
       fdd=open(argv[2],O_CREAT|O_WRONLY|O_TRUNC,0600);
       if(fdd < 0) {
               close(fds);
               perror("open():");
               exit(1);
       }

       while(1) {
               len=read(fds,buf,BUFSIZE);
               if(len < 0) {
                       perror("read()");
                       break;
               }
               if(len == 0) {
                       break;
               }
               pos=0;
               while(len > 0) {
                       ret=write(fdd,buf+pos,len);
                       if(ret < 0) {
                               perror("write()");
                               exit(1);
                       }
                       pos+=ret;
                       len-=ret;

               }
       }

       close(fdd);
       close(fds);
       exit(0);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章