我正在将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"
第一个是库应创建的目录的实际示例。
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
正如为什么代字号(〜)不能在双引号内展开?,它最初是一个很久以前合并的csh
shell功能(引自1994年的一页)。在任何给定系统的运行时库中都未实现。bash
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句