mkdir 在 C 中的 OS X 上出现波浪号失败?
mkdir fails with tilde on OS X in C?
我正在将一个 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
正如很久以前在 Why doesn't the tilde (~) expand inside double quotes?, this was originally a csh
shell feature which bash
incorporated 中指出的那样(引用 1994 年的一页)。它未在任何给定系统的运行时库中实现。
我正在将一个 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
正如很久以前在 Why doesn't the tilde (~) expand inside double quotes?, this was originally a csh
shell feature which bash
incorporated 中指出的那样(引用 1994 年的一页)。它未在任何给定系统的运行时库中实现。