Я столкнулся с проблемой в системах Linux, для которой я не могу найти конкретного решения в Интернете.
У меня есть приложение C++, назовем его Program1
. Program1
открывает текстовый файл для чтения. Текстовый файл находится в родительском каталоге на один уровень выше (../test_file.txt
). Итак, в коде, чтобы открыть файл:
ifile.open("../test_file.txt");
Если вы откроете терминал в том же каталоге, что и Program1
, и запустите исполняемый файл:
$ ./Program1 &
Все работает нормально. test_file.txt
читается без проблем.
Теперь давайте поместим сценарий оболочки в другой каталог, назовем его ShellScript1
. Этот скрипт выполняет Program1
и другие программы в разных каталогах. Важная строка файла сценария оболочки выглядит примерно так:
../../test/Release/Program1 &
При запуске этого сценария оболочки выполняется Program1
, но test_file.txt
не может быть прочитано. Теперь, насколько я могу судить, это потому, что активный каталог является каталогом сценария оболочки.
Мне нужно иметь возможность запускать исполняемые файлы с помощью сценария оболочки, который не изменяет активно относительный путь, используемый в исполняемом файле, например, с Program1
при запуске через сценарий оболочки.
Есть ли способ обойти это? Или мой метод чтения файла в моем коде нуждается в улучшении?
Обратите внимание, что я запускаю каждый процесс как фоновый процесс, чтобы убедиться, что я могу запускать каждый исполняемый файл одновременно.