2015-03-20 2 views
0

В Solaris у меня есть указатель на argv[0] с getexecname, а затем я могу memcpy в этом месте. (За Finding current executable's path without /proc/self/exe)Найти указатель на argv [0], чтобы я мог его изменить

мне было интересно, как получить указатель на argv[0] в Linux я сделал readlink на /proc/self/exe, но это не дает мне указатель на него.

БЛАГОДАРЯ

ответ

1

&argv[0] получает вам указатель argv[0].

Вы можете перезаписать символы, хранящиеся в массиве, на которые указывает argv[0], если вы не проходите мимо существующего нулевого терминатора; однако это might cause UB, чтобы попробовать и изменить указатель argv[0].

+0

Thanks Matt! Но у меня нет доступа к argv, я запускаю код из ctypes. :( – Noitidart

1

Для readlink, Принесите свой собственный буфер. Вы выделяете буфер, передаете указатель на него, и readlink будет хранить результаты там:

#include <unistd.h> 
#include <linux/limits.h> 

int main() { 
    char buffer[PATH_MAX]; 

    int size = readlink("/proc/self/exe", buffer, sizeof(buffer)); 
    buffer[size] = '\0'; 

    // buffer is now the char* holding the filename 

    printf("The executable is %s\n", buffer); 
} 
+0

Спасибо другому парню! Итак, после того, как я прочитал ссылку, я могу maniuplate этот буфер, и это внесет изменения в приложение? – Noitidart

+1

@Noitidart Нет, readlink на '/ proc/self/exe' - это если вы хотите найти путь к исполняемому файлу. Буфер принадлежит вам и не влияет на что-либо еще. Если ваш вопрос: «Как изменить отображаемое имя исполняемого имени« верхний »для запущенного процесса Python», пожалуйста, спросите об этом. –

+0

Спасибо другим парень, который прямо сейчас. Редактировать: http://www.stackoverflow.com/questions/29159130/get-pointer-to-argv0-so-i-can-change-it – Noitidart