自己寫的unix檔案拷貝指令cp實現函式

小薛引路發表於2017-11-12
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <strings.h>
//功能
//引數:
//返回值:
//作者:
//日期:
int fileCopy(int s_fd, int d_fd)
{
    //讀取s_fd
    //注意檔案許可權的拷貝
    //每呼叫一次函式就是一次開銷,因此要注意在呼叫函式之前判斷是否要進入函式
    char buf[128];
    char* tmp;
    int r_ret, w_ret;
    //寫d_fd
    bzero(buf,128);//讀取之前要清空一下
    while((r_ret = read(s_fd, buf, 128)) != 0)
    {
        //保證讀取的內容全部寫到檔案中
        tmp = buf;
      while( (w_ret = write(d_fd, tmp, r_ret)) != -1)
      {
          tmp += w_ret;
          r_ret -= w_ret;
          if(r_ret == 0)
          {
              break;
          }
      }
       bzero(buf,128);//清空一下資料
    }
    return 0;
}
int main(int argc, char** argv)
{
    int s_fd, d_fd;
   s_fd =  open(argv[1], O_RDONLY);
   d_fd =  open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0664);
   
   if(s_fd == -1 || d_fd == -1)
   {
       perror("open");
       return 1;
   }
   fileCopy(s_fd,d_fd);
    close(s_fd);
    close(d_fd);
    return 0;
}

相關文章