1

こんにちは、UNIX で CP プログラムをエミュレートする再帰コピー関数を作成しようとしています。したがって、基本的に -r オプションを指定してプログラムを実行すると、すべてのサブディレクトリを含むフォルダーがコピーされます。フォロー機能を利用しています。

void copyDirectory(char *destDir, char *dirName)
{
    printf("copyDirectory run \n");

    int charCnt;
    int srcFd;
    int dstFd;
    char* sourcePath;
    char* destPath;

    DIR *dir = opendir(dirName);
    if(dir == NULL){
        return;
    }

    char Path[256], *EndPtr = Path;

    struct dirent *e;
    strcpy(Path, dirName);

    EndPtr += (strlen(dirName)+1);
    while((e = readdir(dir)) != NULL){
        sourcePath = malloc(strlen(Path)+1+strlen(e->d_name));
        destPath = malloc(strlen(destDir)+1+strlen(Path));
        strcpy(destPath, destDir);
        strcat(destPath, slash);
        strcat(destPath, Path);

        if (0 != access(destPath, F_OK)) {
            mkdir(destPath,0777);
            printf("mkdir %s \n", destPath);
        }

        strcpy(sourcePath, Path);
        strcat(sourcePath, slash);
        strcat(sourcePath, e->d_name);

        printf("copyDirectory destPath = %s \n", destPath);
        printf("copyDirectory sourcePath = %s \n", sourcePath);

        if(strcmp(e->d_name, dott) == 0){
            continue;
        }
        if(strcmp(e->d_name, dot) == 0){
            continue;
        }


        if(whatType(sourcePath) == 1){
            copyDirectory(destDir, sourcePath);   
        }
        else{
            /* copyFile(destPath, sourcePath);*/
        } 

        free(sourcePath);
        free(destPath);
    }
}

次のコマンドラインを使用してプログラムを実行すると、これはうまくいくようです。

Mycopy Sourcefolder/ DestinationFoler/

しかし、このコマンド ラインで実行すると、プログラム内の mkdir 関数が機能しなくなります。

Mycopy Sourcefolder/Subfolder/ DestinationFoler/

奇妙なことに、mkdir 呼び出し内に printf マーカーを配置して、destPath が何であったかを確認し、subfoler を使用せずにプログラムを呼び出した場合とフォーマットが変わらないように見えます。何が起こっている?

4

1 に答える 1