我正在将一个C库移植到OSX,直到现在还没有给我带来太多麻烦。在下一个功能中:
int createDirectory( char *directory ){
int error;
error = mkdir(directory, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if( error < 0 ){
if( errno != EEXIST ){
return errno;
}
}
return error;
}
无论directory
是什么,mkdir()
总是以EPERM
失败(不允许操作)。我不确定xcode可执行文件是否为沙箱,或者我是否遗漏了某些东西,但是我传递给该函数的每条路径都失败了。
我已经尝试从终端创建mkdir,文件夹创建没有问题,所以我不确定问题出在哪里。此功能在Linux和Solaris中运行良好。
示例路径:
"~/Library/Application\\ Support/myApp"
"~/Desktop/myApp"
第一个是库应该创建的目录的实际示例。
答案 0 :(得分:3)
OSX不会像'~'
那样展开bash
字符(虽然它使用bash
)。
鉴于此计划,请在/tmp
中运行:
#include <stdlib.h>
#include <sys/stat.h>
#include <stdio.h>
int main(void)
{
char *given = "~/Library";
char result[1024];
char *s;
mkdir("~", 0755);
mkdir("~/Library", 0755);
if ((s = realpath(given, result)) != 0) {
printf ("%s\n", s);
} else {
perror("realpath");
}
return 0;
}
我在OSX上得到了这个结果:
/private/tmp/~/Library
我在Linux(Debian)以及Solaris 10上得到了这个结果:
/tmp/~/Library
如 Why doesn't the tilde (~) expand inside double quotes? 所述,这最初是csh
shell 功能,bash
incorporated很久以前(引用1994年的一页)。它没有在任何给定系统的运行时库中实现。