Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to implement readlink to find the path

Using the readlink function used as a solution to How do I find the location of the executable in C?, how would I get the path into a char array? Also, what do the variables buf and bufsize represent and how do I initialize them?

EDIT: I am trying to get the path of the currently running program, just like the question linked above. The answer to that question said to use readlink("proc/self/exe"). I do not know how to implement that into my program. I tried:

char buf[1024];   string var = readlink("/proc/self/exe", buf, bufsize);   

This is obviously incorrect.

like image 438
a sandwhich Avatar asked Apr 02 '11 20:04

a sandwhich


1 Answers

This Use the readlink() function properly for the correct uses of the readlink function.

If you have your path in a std::string, you could do something like this:

#include <unistd.h> #include <limits.h>  std::string do_readlink(std::string const& path) {     char buff[PATH_MAX];     ssize_t len = ::readlink(path.c_str(), buff, sizeof(buff)-1);     if (len != -1) {       buff[len] = '\0';       return std::string(buff);     }     /* handle error condition */ } 

If you're only after a fixed path:

std::string get_selfpath() {     char buff[PATH_MAX];     ssize_t len = ::readlink("/proc/self/exe", buff, sizeof(buff)-1);     if (len != -1) {       buff[len] = '\0';       return std::string(buff);     }     /* handle error condition */ } 

To use it:

int main() {   std::string selfpath = get_selfpath();   std::cout << selfpath << std::endl;   return 0; } 
like image 92
Mat Avatar answered Sep 30 '22 19:09

Mat