Comment mettre en œuvre readlink pour trouver le chemin
À l'aide de la readlink fonction utilisée comme une solution à Comment puis-je trouver l'emplacement de l'exécutable en C?, comment pourrais-je obtenir le chemin d'accès dans un tableau de char? Aussi, ce qui ne les variables de buf et de bufsize représentent et comment les initialiser?
EDIT: je suis en train d'essayer d'obtenir le chemin d'accès du programme en cours d'exécution, tout comme la question ci-dessus. La réponse à cette question, a déclaré à l'utilisation readlink("proc/self/exe")
. Je ne sais pas comment faire pour la mettre dans mon programme. J'ai essayé:
char buf[1024];
string var = readlink("/proc/self/exe", buf, bufsize);
C'est évidemment incorrect.
Vous devez vous connecter pour publier un commentaire.
Ce Utiliser le readlink() fonctionnent correctement pour les utilisations correctes de la
readlink
fonction.Si vous avez votre chemin dans un
std::string
, vous pourriez faire quelque chose comme ceci:Si vous êtes seulement au bout d'un chemin fixe:
Pour l'utiliser:
get_selfPath()
fonction renvoie le chemin d'accès, y compris le nom de l'exécutable. Pour obtenir juste le chemin de retirer le nom de l'exécutable, vous pouvez effectuer les opérations suivantes:std::string::size_type t = path.find_last_of("/")
et puispath = path.substr(0,t)
. Je ne sais pas pourquoi, partout, ce n'est jamais explicitée assez;)do_readlink
?std::vector
?if (len != -1) { return std::string(buff, static_cast<size_t>(len)); }
Regardons ce la page de manuel dit:
OK. Devrait être assez simple. Compte tenu de votre tampon de 1024 caractères:
if (readlink(/*...*/))
tests de non-nulle. Moins de 0 est différent de zéro.Accepté réponse est presque correct, sauf que vous ne pouvez pas compter sur PATH_MAX parce que c'est
(À partir de readlink(2) page de manuel)
Aussi, lorsqu'il est défini, il n'est pas toujours le reflet de la "vraie" limite. (Voir http://insanecoding.blogspot.fr/2007/11/pathmax-simply-isnt.html )
La readlink la page de manuel donne aussi une façon de le faire que sur lien symbolique :
Toutefois, dans le cas de /proc/self/exe comme pour la plupart de /proc fichiers, stat.st_size serait de 0. La seule solution que je vois est pour redimensionner tampon alors qu'il ne rentre pas.
Je suggère l'utilisation de
vector<char>
à suivre à cette fin:Prises à partir de: http://www.delorie.com/gnu/docs/glibc/libc_279.html