mkdir在C的OS X上出现代字号失败?

白衣

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

不管是什么directorymkdir()总是会失败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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章