Допустим, у меня есть двоичный файл, 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
, оставив сам бинарный файл без изменений. Есть ли простой способ добиться этого?