こんにちは、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 を使用せずにプログラムを呼び出した場合とフォーマットが変わらないように見えます。何が起こっている?