使用C语言在Mac OS X中获取主目录

boo*_*oom 8 c macos home-directory

如何在编辑器中Mac OS X使用C语言获取主目录的路径XCode.

sor*_*rin 12

这应该适用于Linux,Unix和OS X,对于Windows,您需要稍作修改.

#include <stdlib.h>
#include <stdio.h>    
#include <pwd.h>
#include <unistd.h>

int main(void)
{
    const char *homeDir = getenv("HOME");

    if !homeDir {
        struct passwd* pwd = getpwuid(getuid());
        if (pwd)
           homeDir = pwd->pw_dir;
    }
    printf("Home directory is %s\n", homeDir);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


dra*_*ard 8

使用FSFindFolder:

UInt8 path[1024];
FSRef file;
FSFindFolder( kOnAppropriateDisk , kCurrentUserFolderType , kCreateFolder , &file );
FSRefMakePath( &file , path , sizeof(path) );
Run Code Online (Sandbox Code Playgroud)

使用CSCopyUserName:

char path[1024];
CFStringRef name = CSCopyUserName( true );
CFStringRef full = CFStringCreateWithFormat( NULL , NULL , CFSTR( "/Users/%@" ) , name );
CFStringGetCString( full , path , sizeof(path) , kCFStringEncodingUTF8 );
// release strings
Run Code Online (Sandbox Code Playgroud)

与NSHomeDirectory:

char path[1024];
CFStringGetCString( (CFStringRef)NSHomeDirectory() , path , sizeof(path) , kCFStringEncodingUTF8 );
Run Code Online (Sandbox Code Playgroud)

请注意该路径可以使用UTF8字符.

  • @jweyrich只适用于iPhone.在正常的MacOS上,它与其他MacOS相当.这些都不适用于iPhone. (2认同)
  • 示例应该说明需要哪些包含文件。 (2认同)

dre*_*lax 6

#include <stdlib.h>
#include <stdio.h>    

int main(void)
{
    const char *homeDir = getenv("HOME");

    if (homeDir)
        printf("Home directory is %s\n", homeDir);
    else
        printf("Couldn't figure it out.\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 正如jweyrich所说,这不可靠.无法保证HOME已设置为主目录或根本未设置.出于安全原因,服务器进程通常会删除其环境 你应该使用`getpwuid()`来返回密码结构,包括用户数据库中的主目录.http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/getpwuid.3.html (7认同)
  • `$ HOME =擦除; ./ app` =主目录已被删除 (3认同)