构建 Linux cp 命令的版本

Building a version of the Linux cp command

你好,我正在尝试用 C 构建一个 linux cp 命令的版本,它可以处理以下测试用例

  1. cpy f1 f2 - 将 f1 的内容复制到 f2
  2. cpy f d - 将 f 复制到 d/f
  3. cpy d1/d2/d3/f1 f2 - 将 f1 的内容复制到 f2
  4. cpy d1/d2/d3/f d - 将 f 复制到 d/f
  5. cpy d1/d2/d3/f d4/d5/d6/f d - 将文件复制到目录 d

我已经获得了 Copyfile 函数的代码,我想做的就是创建我的主要函数来调用 Copyfile 并验证测试用例是否得到正确处理。这是 CopyFile 函数和 main 函数。我在正确的轨道上吗?我无法测试,因为我目前在编译时有错误(error:confilcting Copyfile 的类型)而且我似乎无法弄清楚出了什么问题。

int copyFiles(int argC, char* argV[]){
   int srcFd;
   int dstFd;
   int charCnt;
   int buffersize = strtol(argV[3], NULL, 10);
   char buf[buffersize];

   /*Check args*/
   if( argC!=4 ){
      fprintf( stderr, "usage: %s source destination\n", argV[0]);
      exit(1);
   }

   /*Open the files*/
   srcFd= open(argV[1],O_RDONLY);
   if( srcFd==-1 ){
      errExit("Cannot open ", argV[1]);
   }
   dstFd= creat(argV[2],COPYMODE);
   if( dstFd==-1 ){
        errExit( "Cannot create ", argV[2]);
   }

   /*Copy the data*/
   while( (charCnt= read(srcFd,buf,buffersize)) > 0 ){
       if( write(dstFd,buf,charCnt ) != charCnt ){
          errExit("Write error to ", argV[2]);
       }
    }
   if( charCnt==-1 ){
      errExit("Read error from ", argV[1]);
   }

   /*Close files*/
   if ( close(srcFd) == -1 || close(dstFd) == -1 ){
      errExit("Error closing files","");
   }

}

 int copyFiles(char *srcFd,char *dstFd);

 int main(int argC, char* argV[])
{
   char *srcFd = argV[1];
   char *dstFd = argV[2];

    if( srcFd[0] != '/' && dstFd[0] != '/' )//cpy f1 f2
    {
      copyFiles(srcFd, dstFd);
    }
    else if( srcFd[0] != '/' && dstFd[0] == '/' )//cpy f1 /d 
    {
      int i;
       for(i=1; i<=strlen(dstFd); i++)
       {
          dstFd[(i-1)] = dstFd[i];
       }
          strcat(dstFd, "/");
          strcat(dstFd, srcFd);

          copyFiles(srcFd, dstFd);

    } 
      else
      {
           fprintf(stderr, "usage: cp1 source destination\n");
            exit(1);
  }
}

您已将参数定义为 int 和 char* 的函数 int copyFiles(int argC, char* argV[])

但在主程序中声明为 char* 和 char* int copyFiles(char *srcFd,char *dstFd);

C 不接受,因此存在冲突。这就是它显示错误的原因。