argv не работает с chdir

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

0

Решение

Вам нужно использовать splitpath или аналогичный, чтобы удалить имя исполняемого файла от argv[0], Ты не можешь chdir в файл.

[править] Извините, я думаю splitpath это вещь для Windows … Просто сделайте это:

char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;

Сейчас argv[0] был обрезан для удаления имени исполняемого файла.

Помните, что командная строка может вообще не содержать никаких каталогов.


Вы пытаетесь сломать всю парадигму Linux (я полагаю), пытаясь это … Вам не нужно знать, где хранится ваш исполняемый файл. Обычно вы указываете вывод одним из следующих способов:

  1. В файле конфигурации (который, например, может храниться в /usr/local/etcили домашний каталог пользователя или указанный в командной строке);

  2. Использование параметров командной строки;

  3. Запись на стандартный вывод.

4

Другие решения

Потому что argv [0] имеет путь к текущему сценарию, включая текущий сценарий. Таким образом, вам нужно обрезать все, что следует за последним разделителем пути («/», «:» или «\» в зависимости от вашей платформы) и передать результат тот чдуру.

1