ファイルの名前を CIFS マウントからローカル パスに変更しようとすると (ファイルをサーバーからローカル HDD に移動する)、-1 が返されます。ファイルを削除したり、新しいファイルを追加したりできますが、rename() 関数を使用してそれを行うことはできません。プログラムは root として実行されており、cifs マウントのユーザーはサーバー上の共有とローカル ファイルシステムに対する完全な権限を持っています。
サーバー: Windows XP SP3 x32
ローカル: Ubuntu 13.04 x64
smb マウント:
sudo mount -t cifs -o username=admin_account,password=<passw> \
//server/share /local/mount/point
C コード:
void
function moveFile(char *fname){
char *base;
base = basename(fname);
char newF[strlen(getSaveDir()) + strlen(base)];
sprintf(newF,"%s%s", getSaveDir(), base);
int result;
result = rename(fname, newF);
if( result == 0 ) {
printf("Moved file: %s to %s", fname, newF);
} else {
printf("There was an error moving %s to %s (ID: %d)", fname, newF, result);
//TODO figure out better fix than this
remove(fname);
}
}