构建Linux cp命令的一个版本

时间:2017-05-19 03:00:47

标签: c linux cp

您好我试图在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
  6. 我已经给出了Copyfile函数的代码,我尝试做的就是创建我的main函数来调用Copyfile并验证测试用例是否正确处理。这是CopyFile函数和main函数。我在正确的轨道上吗?我没能测试,因为我在编译时遇到错误(错误:Copyfile的confilcting类型),我似乎无法弄清楚什么是错的。

    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);
      }
    }
    

1 个答案:

答案 0 :(得分:1)

您已使用 int和char * 将参数定义为&#xA; int copyFiles(int argC,char * argV [])

&#xA;&#xA;

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

&#xA;&#xA;

哪些 C 不接受并因此发生冲突。这就是它显示错误的原因。

&#xA;