2012-04-20 3 views
-5

Учитывая исполняемый файл, его полный путь sholud будет отображаться в linux (используя C). Исполняемый файл может находиться в текущей директории или может быть в другом каталоге.Учитывая исполняемый файл, отобразите его полный путь

Он должен быть аналогичен команде TYPE в unix. например с type cp, результатом должно быть /bin/cp.

Может ли кто-нибудь предоставить мне код, пожалуйста? Atlest - системный вызов, связанный с ним.

+0

Это больше похоже на «* Вы опасны для кода?» « –

+0

Для этого нет системного вызова. – jpalecek

+0

Что делать, если у вас есть два исполняемых файла с одинаковым именем (и, возможно, одинаковое поведение) в двух разных каталогах? (У меня есть куча исполняемых файлов «a.out», распространяемых через мой жесткий диск) – pmg

ответ

2

Это очень просто. Я не хочу давать вам код, кроме основной идеи.

  • повторить все пути в переменной переменной $ PATH.
  • для каждого пути проверьте, существует ли исполняемый файл, который вы ищете.
    • если есть эхо текущего пути.

Вот проект findcom я написал давно для операционной системы Windows, .NET 2.0, который ищет команду. Вы можете получить некоторую идею от источника.

0

В Linux используется переменная среды $ PATH для поиска исполняемой программы. Обычно вы не выполняете полный путь для выполнения программы (т. Е. Вы просто выполняете ls, а не/usr/bin/ls). Имя исполняемого файла выполняется в каталогах под $ PATH. Переменная окружения $ PATH выглядит примерно так:

 
$ echo $PATH 
/usr/bin:/usr/sbin:/bin 

система найдет исполняемый файл под: -разделенное каталогов. Что вам нужно сделать, это разделить эту строку на «:», а затем конкатенировать имя программы до конца; выдать вызов stat. Если stat возвращается успешно, это означает, что программа существует. Если не перейти к следующему кандидату. Система, как и вы, выполнит первый найденный путь.

1

Чтобы получить полный путь к исполняемому файлу, который будет выполняться при вводе команды, использование которых

$ which bash 
/bin/bash 

Для поиска всех ваших путей (в том числе MANPATH) использовать WhereIs

$ whereis bash 
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz 

The whereis может быть полезно, если у вас есть исполняемые файлы с тем же именем в разных частях вашего пути, например, sysV shutdown (/ usr/sbin/shutdown) и остановка berkeley (/ usr/ucb/shutdown) в системах Solaris. which сообщает, какой из них вы будете запускать по умолчанию, а whereis предоставляет вам все возможности.

Если вы не получите ответ обратно, это означает, что это оболочка встроенной, а не исполняемый файл,

$ which while 
$ whereis while 
while: 

однако, если он существует в виде встроенной команды оболочки И исполняемый файл, он будет возвращать путь исполняемому файлу, но будет запускаться встроенный, если не указан путь к исполняемому файлу.

$ which test 
/usr/bin/test 
$ whereis test 
test: /usr/bin/test /usr/share/man/man1/test.1.gz 
Смежные вопросы