C - 使用第二个参数作为目录复制文件



我正在浏览 C 语言的复制程序,我试图了解以下代码的工作原理。 我对这些函数进行了研究,但由于某种原因无法理解它。 例如 "./main a temp/" 此命令将 a 复制到文件夹 temp/,如果第二个参数以 temp/的"/"结尾,则下面的代码将第二个参数分配为目录。 如果用户输入"./main a b",则程序复制a 并创建具有与 B 相同的文件权限的 B。我知道其他一切。除了下面的代码。有人可以解释下面的代码及其工作原理吗?谢谢

if(S_ISDIR(ost.st_mode)){       //if output filename is a directory
    //concatenate directory name and input name
    int ilen = strlen(iname);
    int olen = strlen(oname);
    int len = ilen + olen + 2;
    char *copy_name = (char*) malloc(len);  //dynamically allocate a memory buffer
    if(copy_name == NULL)
        oops("Cannot malloc memory", ":");
    memcpy(copy_name, oname, olen);         //copy directory name
    copy_name[olen] = '/';                  //separate directory and file name with a slash
    memcpy(&copy_name[olen+1], iname, ilen);    //copy output file name
    return copy_name;
}else{
    return strdup(oname);   //if output filename is not a directory, just copy it
}

此函数的目的是返回文件路径。目标文件路径。

您已经确定此程序有两种模式。 1( 其中两个参数都是文件名,以及 2( 其中第二个参数是文件夹。

模式 1(这两个参数都是文件名。

./主要旧.txt新.txt

destinationFilePath = thisFunc("old.txt", "new.txt");
//new.txt

模式 2(第二个参数是文件夹。

./主要旧.txt my_archive/

destinationFilePath = thisFunc("old.txt", "my_archive/");
//my_archive/old.txt

附言在这两种模式下,此代码在新内存中返回文件名,应对其进行管理;它不依赖于任一参数的分配内存。

P.P.S 就像@Jonathan指出的那样,内存和空终止的代码质量不是很好。

相关内容

  • 没有找到相关文章

最新更新