六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學習啦>學習電腦>操作系統(tǒng)>Linux教程>

linux cp命令簡單的實現

時間: 志藝942 分享

  cp指令用于復制文件或目錄,如同時指定兩個以上的文件或目錄,且最后的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或目錄復制到此目錄中。那么你知道linux cp命令簡單的實現么?接下來是小編為大家收集的linux cp命令簡單的實現,歡迎大家閱讀:

  linux cp命令簡單的實現

  實現功能:

  $./cp ~/filename ~/OtherName //文件到文件的拷貝

  $./cp ~/directory/filename . //文件到當前目錄的拷貝

  $./cp ~/directory/filename ~/directory/ //文件到目錄的拷貝

  不白費口舌,直接上代碼才是王道!

  001

  #include

  002

  #include

  003

  #include

  004

  #include

  005

  #include

  006

  #include

  007

  #include

  008

  #include

  009

  010

  #define BUF_SIZE 1024

  011

  #define PATH_LEN 128

  012

  013

  void my_err(char *err_string, int line )

  014

  {

  015

  fprintf(stderr,"line:%d ",line);

  016

  perror(err_string);

  017

  exit(1);

  018

  }

  019

  020

  void copy_data(const int frd,const int fwd)

  021

  {

  022

  int read_len = 0, write_len = 0;

  023

  unsigned char buf[BUF_SIZE], *p_buf;

  024

  025

  while ( (read_len = read(frd,buf,BUF_SIZE)) ) {

  026

  027

  if (-1 == read_len) {

  028

  my_err("Read error", __LINE__);

  029

  }

  030

  else if (read_len > 0) { //把讀取部分寫入目標文件

  031

  p_buf = buf;

  032

  while ( (write_len = write(fwd,p_buf,read_len)) ) {

  033

  if(write_len == read_len) {

  034

  break;

  035

  }

  036

  else if (write_len > 0) { //只寫入部分

  037

  p_buf += write_len;

  038

  read_len -= write_len;

  039

  }

  040

  else if(-1 == write_len) {

  041

  my_err("Write error", __LINE__);

  042

  }

  043

  }

  044

  if (-1 == write_len) break;

  045

  }

  046

  }

  047

  }

  048

  049

  int main(int argc, char **argv)

  050

  {

  051

  052

  int frd, fwd; //讀寫文件描述符

  053

  int len = 0;

  054

  char *pSrc, *pDes; //分別指向源文件路徑和目標文件路徑

  055

  struct stat src_st,des_st;

  056

  057

  if (argc < 3) {

  058

  printf("用法 ./MyCp <源文件路徑> <目標文件路徑>\n");

  059

  my_err("arguments error ", __LINE__);

  060

  }

  061

  062

  frd = open(argv[1],O_RDONLY);

  063

  if (frd == -1) {

  064

  my_err("Can not opne file", __LINE__);

  065

  }

  066

  067

  if (fstat(frd,&src_st) == -1) {

  068

  my_err("stat error",__LINE__);

  069

  }

  070

  /*檢查源文件路徑是否是目錄*/

  071

  if (S_ISDIR(src_st.st_mode)) {

  072

  my_err("略過目錄",__LINE__);

  073

  }

  074

  075

  pDes = argv[2];

  076

  stat(argv[2],&des_st);

  077

  if (S_ISDIR(des_st.st_mode)) { //目標路徑是目錄,則使用源文件的文件名

  078

  079

  len = strlen(argv[1]);

  080

  pSrc = argv[1] + (len-1); //指向最后一個字符

  081

  /*先找出源文件的文件名*/

  082

  while (pSrc >= argv[1] && *pSrc != '/') {

  083

  pSrc--;

  084

  }

  085

  pSrc++;//指向源文件名

  086

  087

  len = strlen(argv[2]);

  088

  // . 表示復制到當前工作目錄

  089

  if (1 == len && '.' == *(argv[2])) {

  090

  len = 0; //沒有申請空間,后面就不用釋放

  091

  pDes = pSrc;

  092

  }

  093

  else { //復制到某目錄下,使用源文件名

  094

  pDes = (char *)malloc(sizeof(char)*PATH_LEN);

  095

  if (NULL == pDes) {

  096

  my_err("malloc error ", __LINE__);

  097

  }

  098

  099

  strcpy(pDes,argv[2]);

  100

  101

  if ( *(pDes+(len-1)) != '/' ) { //目錄缺少最后的'/',則補上’/‘

  102

  strcat(pDes,"/");

  103

  }

  104

  strcat(pDes+len,pSrc);

  105

  }

  106

  }

  107

  108

  /* 打開目標文件, 使權限與源文件相同*/

  109

  fwd = open(pDes,O_WRONLY | O_CREAT | O_TRUNC,src_st.st_mode);

  110

  if (fwd == -1) {

  111

  my_err("Can not creat file", __LINE__);

  112

  }

  113

  copy_data(frd,fwd);

  114

  //puts("end of copy");

  115

  if (len > 0 && pDes != NULL)

  116

  free(pDes);

  117

  118

  close(frd);

  119

  close(fwd);

  120

  121

  return 0;

  122

  }

  
看了“linux cp命令簡單的實現”還想看:、

1.Linux 的cp命令及示例

2.linux cp命令使用介紹

3.Linux下如何使用cp命令

4.Linux中cp和scp命令怎么使用

linux cp命令簡單的實現

cp指令用于復制文件或目錄,如同時指定兩個以上的文件或目錄,且最后的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或目錄復制到此目錄中。那么你知道linux cp命令簡單的實現么?接下來是小編為大家收集的linux cp命令簡單的
推薦度:
點擊下載文檔文檔為doc格式
2919378