Простой способ - использовать абсолютный путь ...
my_file = fopen("/path/to/my/file.txt", "r");
Или вы можете использовать относительный путь. Если ваш исполняемый файл находится в /home/me/bin
, а ваш текстовый файл в /home/me/doc
, то ваш относительный путь может быть примерно таким:
my_file = fopen("../doc/my_file.txt", "r");
Важная вещь, которую следует помнить в относительных путях, заключается в том, что она относится к текущему рабочему каталогу при запуске исполняемого файла. Поэтому, если вы использовали вышеуказанный относительный путь, но находились в каталоге /tmp
и запустили /home/me/bin/myprog
, он попытается открыть /tmp/../doc/my_file.txt
(или /doc/my_file.txt
), который, вероятно, не существует.
Более надежный вариант - взять путь к файлу в качестве аргумента программы и передать его в качестве первого аргумента fopen
. Простейшим примером будет просто использовать argv[1]
из параметров main
, т.е.
int main(int argc, char **argv)
{
FILE *my_file = fopen(argv[1], "r");
/* ... */
return 0;
}
Конечно, вы захотите включить проверку ошибок, чтобы убедиться, что argc
> 2 и т. Д.