wht*_*lnv 1 c macos errno mkdir
我正在将一个 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;
}
Run Code Online (Sandbox Code Playgroud)
无论directory是什么,mkdir()总是失败EPERM(不允许操作)。我不确定 xcode 可执行文件是否已沙箱化,或者我是否丢失了某些内容,但我传递给该函数的每个路径都失败了。
我尝试从终端 mkdir 并且创建文件夹没有问题,所以我不确定问题出在哪里。该函数在 Linux 和 Solaris 中运行良好。
示例路径:
"~/Library/Application\\ Support/myApp"
"~/Desktop/myApp"
Run Code Online (Sandbox Code Playgroud)
第一个是库应创建的目录的实际示例。
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;
}
Run Code Online (Sandbox Code Playgroud)
我在 OSX 上得到这个结果:
/private/tmp/~/Library
Run Code Online (Sandbox Code Playgroud)
我在 Linux (Debian) 以及 Solaris 10 上得到了这个结果:
/tmp/~/Library
Run Code Online (Sandbox Code Playgroud)
如为什么波形符 (~) 不在双引号内展开?,这最初是很久以前合并的csh shell功能(引用 1994 年的一页)。它没有在任何给定系统的运行时库中实现。bash
| 归档时间: |
|
| 查看次数: |
1168 次 |
| 最近记录: |