"получение" пути в Linux - PullRequest
       25

"получение" пути в Linux

3 голосов
/ 06 сентября 2008

Я пишу программу на C в Linux. Команды, такие как execv (), требуют путь в форме строки c. Есть ли команда, которая будет возвращать текущий путь в виде строки стиля c?

Ответы [ 5 ]

11 голосов
/ 06 сентября 2008

getcwd ()

СИНТАКСИС

#include <unistd.h>

char *getcwd(char *buf, size_t size);

ОПИСАНИЕ

Функция getcwd () должна поместить абсолютный путь текущего рабочего каталога в массив, на который указывает buf, и вернуть buf . Путь, скопированный в массив, не должен содержать компонентов, которые являются символическими ссылками. Аргумент size - это размер в байтах массива символов, на который указывает аргумент buf . Если buf является нулевым указателем, поведение getcwd () не определено.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

После успешного завершения getcwd () возвращает аргумент buf . В противном случае getcwd () должен вернуть нулевой указатель и установить errno , чтобы указать ошибку. Содержимое массива, на которое указывает buf , тогда не определено ....

6 голосов
/ 06 сентября 2008

Аргумент path для execv () - это путь к приложению, которое вы хотите выполнить, а не текущий рабочий каталог (который будет возвращен getcwd ()) или путь поиска оболочки (который будет быть возвращенным getenv ("PATH")).

В зависимости от того, что вы делаете, вы можете получить больше пользы от функции system () в библиотеке C, чем от семейства exec () более низкого уровня.

2 голосов
/ 06 сентября 2008

Это , а не ANSI C:

#include <unistd.h>

char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);
0 голосов
/ 06 сентября 2008

Если путь может быть относительным, вы должны использовать '.' или «./» в качестве пути. Я не уверен, что это сработает, но вы можете попробовать.

0 голосов
/ 06 сентября 2008

Я не профессиональный программист, так что это не точный ответ.

Что вам нужно сделать, это получить переменную среды PWD (текущий рабочий каталог)

Я не уверен, что это за библиотека, но это стандартный заголовок linux.

Я посмотрю вокруг и посмотрю, смогу ли я найти его.

редактирование:

Я думал о getenv () , который помог бы, если вам также нужно запускать системные команды и требовать различные пути бина, расположенные в PATH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...