Открытие файла по пути относительно двоичного файла при запуске из другого каталога - PullRequest
0 голосов
/ 27 апреля 2020

Допустим, у меня есть двоичный файл, sayhello вместе с текстовым файлом hello.txt в каталоге /path/to/hello/. Двоичный файл читает текстовый файл и выводит его содержимое в stdout:

#include <stdio.h>

int main()
{
    char buffer[14];
    FILE* file = fopen("/path/to/hello/hello.txt", "r");
    fgets(buffer, sizeof(buffer), file);
    puts(buffer);
    fclose(file);
    return 0;
}

[/path/to/hello/] $ ./sayhello Hello, world!

Я могу запустить sayhello из любого места, если я добавлю его каталог в PATH:

export PATH=$PATH:/path/to/hello/
[/other/path/] $ sayhello          Hello, world!

Я знаю, что могу использовать fopen и с относительным путем: FILE* file = fopen("hello.txt", "r"); Однако, если бы я это сделал, мне всегда пришлось бы запускать sayhello из каталога, содержащего текстовый файл (и в моем случае также двоичный файл). Я бы хотел, чтобы fopen открывал файл по пути, который относится к самому двоичному файлу, а не к каталогу, из которого я его запускаю. Это позволило бы мне переместить каталог с файлами куда-нибудь еще и просто изменить мой PATH, оставив сам бинарный файл без изменений. Есть ли простой способ добиться этого?

...