gpt4 book ai didi

c - mkdir 在 C 中的 OS X 上失败并显示波浪号?

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:22 35 4
gpt4 key购买 nike

我正在将一个 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;
}

无论目录 是什么,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? 中所述,这最初是一个 csh shell 特性,它是 bash incorporated很久以前(引用 1994 年的一页)。它未在任何给定系统的运行时库中实现。

关于c - mkdir 在 C 中的 OS X 上失败并显示波浪号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285051/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com