Comment puis-je obtenir le chemin du répertoire de base dans Mac OS X code> à l'aide de
C code> langue dans
xcode code> éditeur " p>
3 Réponses :
#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 = effacé; ./app code> = répertoire personnel est effacé
Comme le dit Jweyrich, ce n'est pas fiable. Il n'y a aucune garantie que la maison est définie sur le répertoire de base ou qu'elle est définie du tout. Les processus de serveur suppriment souvent leur environnement pour des raisons de sécurité. Vous devez utiliser getPwuid () code> qui renvoie la structure de mot de passe comprenant le répertoire de base de la base de données utilisateur. développeur.apple.com/mac/ Bibliothèque / Documentation / Darwin / Référencier CE / ...
POSIX garantit qu'il est défini, voir ici: Accueil Code> Le système doit initialiser cette variable au moment de la connexion pour être un chemin d'accès du répertoire de base de l'utilisateur
. Notez que sur cette page, il est également indiqué "si les variables des deux sections suivantes sont présentes dans l'environnement lors de l'exécution d'une application ou d'une utilité, elles doivent recevoir la signification décrite ci-dessous.".
@Jeremyp: rien ne garantit qu'un répertoire de base valide est défini dans le fichier passwd (sur mon système, MySQL dispose d'un répertoire de base de / inexistant code>). On pourrait soutenir que quiconque changeait délibérément que leur
home code> voudrait que des applications continuent de le traiter comme si c'était leur répertoire personnel.
@DeMlax Posix ne garantit pas que la maison $ est définie, uniquement qu'elle est définie dans le shell de connexion d'un utilisateur, puis si l'utilisateur n'a pas salué avec elle. La question est donc de savoir si vous avez besoin du répertoire de base réel de l'utilisateur ou souhaitez-vous le répertoire de base que l'utilisateur vous dit est leur répertoire de base (j'accepte des cas d'utilisation légitime pour ce dernier ainsi que le premier).
avec fsfinfolder: avec cscopyusername: p> avec NshomeDirectory: p> char path[1024];
CFStringGetCString( (CFStringRef)NSHomeDirectory() , path , sizeof(path) , kCFStringEncodingUTF8 );
Notez que Nshomedirectory code> est trompeur. Il renvoie en fait le répertoire d'applications, pas l'utilisateur actuel HomeDir.
@jweyrich qui ne s'applique qu'à l'iPhone. Sur les macos normales, c'est l'équivalent des autres. Aucun de ces travaux sur iPhone.
@Dawnonward aye! Désolé, je pensais que cela fonctionnait de la même manière. Merci de me corriger.
Notez que cscopyusername () code> est pas i> une solution pour trouver le dossier à domicile d'un utilisateur. Il ne trouvera pas le mien, par exemple, qui est à / réseau / utilisateurs / leeg.
Les exemples doivent indiquer quels fichiers sont requis.
Aucun de ceux-ci n'est c, non? N'a-t-il pas besoin que le fichier soit un fichier .m objectif-c?
@Vorttico ressemble à c pour moi.
Ceci devrait fonctionner sous Linux, UNIX et OS X, pour Windows, vous devez effectuer une légère modification.
#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; }
La réponse acceptée en cours est invalide mais il existe une autre question similaire qui est toujours ouverte Stackoverflow.com/Questtions/3726113/...