Wie kann ich den Pfad des Home-Verzeichnisses in Mac OS X
mit C
Sprache in XCode
Editor erhalten.Wie bekomme ich den Home-Verzeichnis in Mac OS X mit C Sprache?
Antwort
#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;
}
'$ HOME = gelöscht; ./app' = Home-Verzeichnis ist gelöscht – jweyrich
Wie jweyrich sagt, ist dies nicht zuverlässig. Es gibt keine Garantie, dass HOME auf das Home-Verzeichnis eingestellt ist oder dass es überhaupt eingestellt ist. Serverprozesse löschen häufig ihre Umgebung aus Sicherheitsgründen. Sie sollten 'getpwuid()' verwenden, das die Passwortstruktur einschließlich des Home-Verzeichnisses aus der Benutzerdatenbank zurückgibt. http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/getpwuid.3.html – JeremyP
POSIX garantiert, dass es gesetzt ist, siehe hier: ['HOME' Das System soll diese Variable initialisieren zum Zeitpunkt der Anmeldung als Pfadname des Benutzerverzeichnisses des Benutzers] (http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html). Beachten Sie, dass auf dieser Seite auch angegeben wird: "Wenn die Variablen in den folgenden zwei Abschnitten in der Umgebung während der Ausführung einer Anwendung oder eines Dienstprogramms vorhanden sind, erhalten sie die unten beschriebene Bedeutung." – dreamlax
mit FSFindFolder:
UInt8 path[1024];
FSRef file;
FSFindFolder(kOnAppropriateDisk , kCurrentUserFolderType , kCreateFolder , &file);
FSRefMakePath(&file , path , sizeof(path));
mit CSCopyUserName:
char path[1024];
CFStringRef name = CSCopyUserName(true);
CFStringRef full = CFStringCreateWithFormat(NULL , NULL , CFSTR("/Users/%@") , name);
CFStringGetCString(full , path , sizeof(path) , kCFStringEncodingUTF8);
// release strings
mit NSHomeDirectory:
char path[1024];
CFStringGetCString((CFStringRef)NSHomeDirectory() , path , sizeof(path) , kCFStringEncodingUTF8);
beachten Sie, dass der Pfad UTF8-Zeichen verwenden können.
Beachten Sie, dass "NSHomeDirectory" irreführend ist. Es gibt tatsächlich das Anwendungsverzeichnis zurück, nicht den aktuellen Benutzer homedir. – jweyrich
@jweyrich das gilt nur für iPhone. Auf normalem MacOS entspricht es den anderen. Keine davon funktioniert auf dem iPhone. – drawnonward
@drainonward Aye! Entschuldigung, ich dachte, es funktioniert genauso. Danke, dass du mich verbessert hast. – jweyrich
Dies sollte unter Linux, Unix und OS X funktionieren, für Windows müssen Sie eine kleine Änderung vornehmen.
#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;
}
Sie müssen # # einschließen
Nehmen Sie ein paar tiefe Atemzüge, Jonathan ... – mipadi
Aktuelle akzeptierte Antwort ist ungültig, aber es ist eine andere ähnliche Frage, die noch offen ist http://stackoverflow.com/questions/3726113/getting- current-user-home-Verzeichnis-on-os-x – sorin
@JonathanSterling Ich dachte, der Zweck von stackoverflow war es, Leuten zu helfen, sie nicht zu verscheuchen – MickyD