2014-02-19 4 views
0

Я строю свою собственную псевдо оболочку в Linux.using execv использовать команду ./ в linux

Я использую команду execv для запуска команд, которые обычно могут выполняться оболочкой linux.

У меня есть большинство команд, но я не знаю, как использовать execv с командой «./» для запуска других программ. Кто-нибудь знает как это сделать?

Любой совет будет полезен.

+1

'. /' Не команда, а относительный путь к файлу? – isedev

ответ

1

./ не является командой, это путь к текущему каталогу. Похоже, вы должны использовать execvp(file, argv), а не execv(path, argv).

Обновлено для добавления: чтобы быть более конкретным, execvp не ищет PATH, если ваше имя файла содержит «/». Это работает, например:

#include <unistd.h> 
#include <stdio.h> 

int main(void) 
{ 
    execvp("./hello.sh", NULL); 
} 

У меня есть в текущей директории hello.sh, составленный код с gcc test.c, побежал ./a.out и печатает «привет мир». '' не в моей ПУТЕ.

+0

'execvp' будет искать' файл' в каталогах, перечисленных в переменной среды PATH. Это не поможет вообще, если 'файл' находится в текущем каталоге, а текущий каталог не находится в' PATH'. – isedev

+0

Спасибо, когда я понял, что ./ не важно для команды, я только что скорректировал мою строку, чтобы иметь только имя программы, которое появилось после нее, а затем функция execv отлично работала. –

+0

Нет, если имя файла содержит косую черту. Обновлено для ясности. – bazzargh

-1

Вы можете использовать функцию Posix: exec (3). Вы можете посмотреть руководство по адресу here.

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

+0

'exec' и' execv' предоставляют ту же функциональность, но с другой сигнатурой вызова (первая принимает переменное число аргументов 'const char *', последний принимает массив 'const char *'). Использование 'exec' не поможет OP. – isedev

Смежные вопросы