Вопрос

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

Это было полезно?

Решение

getcwd():

СИНОПСИС

#include <unistd.h>

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

ОПИСАНИЕ

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

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

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

Другие советы

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

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

Это нет АНСИ С:

#include <unistd.h>

char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top