Я пытаюсь изменить текущий рабочий каталог на путь к исполняемому файлу, используя chdir()
следующим образом:
#include <iostream>
#include <string>
using namespace std;
int main(int argc,char *argv[]) {
if(chdir(argv[0]) == 0) printf("In %s\n", argv[0]);
else printf("Failed to change directory\n");
}
Выход:
Failed to change directory
Почему не chdir
работать с argv[0]
? Другие решения по этому вопросу также будут приняты.
Вам нужно использовать splitpath
или аналогичный, чтобы удалить имя исполняемого файла от argv[0]
, Ты не можешь chdir
в файл.
splitpath
это вещь для Windows … Просто сделайте это:
char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;
Сейчас argv[0]
был обрезан для удаления имени исполняемого файла.
Помните, что командная строка может вообще не содержать никаких каталогов.
Вы пытаетесь сломать всю парадигму Linux (я полагаю), пытаясь это … Вам не нужно знать, где хранится ваш исполняемый файл. Обычно вы указываете вывод одним из следующих способов:
В файле конфигурации (который, например, может храниться в /usr/local/etc
или домашний каталог пользователя или указанный в командной строке);
Использование параметров командной строки;
Запись на стандартный вывод.
Потому что argv [0] имеет путь к текущему сценарию, включая текущий сценарий. Таким образом, вам нужно обрезать все, что следует за последним разделителем пути («/», «:» или «\» в зависимости от вашей платформы) и передать результат тот чдуру.