Как найти, что система Unix () функционирует путь в C

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

пример, когда я ввожу команду

введите dir

ответ будет

dir является внешней командой (/bin/dir)

это - то, чего я достиг, но не работа

else if(strcmp(arg3[0],"type")==0) //if type command
        {
            if(strcmp(arg3[1],"cat")==0 || strcmp(arg3[1],"rm")==0 || strcmp(arg3[1],"rmdir")==0 || strcmp(arg3[1],"ls")==0 || strcmp(arg3[1],"cp")==0 ||                   strcmp(arg3[1],"mv")==0 || strcmp(arg3[1],"exit")==0 || strcmp(arg3[1],"sleep")==0 || strcmp(arg3[1],"type")==0|| strcmp(arg3[1],"history") ==0)
            {
                printf("%s is a Rshell builtin\n", arg3[1]);
            }
            else
            {
                printf("%s is an external command\n", arg3[1]); 
                char * pPath;
                pPath = getenv ("PATH");
                 if (pPath!=NULL)
                    printf ("The current path is: %s",pPath);


            }
        }
1
задан Ether 6 June 2010 в 16:18
поделиться

5 ответов

Похоже, что вы ищете команду which:

$ which ls
/bin/ls
2
ответ дан 3 September 2019 в 00:01
поделиться

Являются вы ищете , который ?

which <command>

покажет вам, где находится исполняемый файл

0
ответ дан 3 September 2019 в 00:01
поделиться

Два способа:

Прежде всего, обратите внимание, что system () будет использовать другую оболочку, а не вашу. В большинстве реализаций по умолчанию используется / bin / sh, который может быть оболочкой Bourne или bash ... вам нужно выяснить, что делает ваша среда выполнения c. popen () почти всегда делает то же самое, что и system (), в любом случае это правда на Solaris, HPUX и с glibc.

FILE *cmd=popen("/usr/bin/echo $PATH");
char tmp[256]={0x0};

if (cmd!=NULL)
{
   while (fgets(tmp, sizeof(tmp), cmd)!=NULL)   
     printf("%s", tmp);
   pclose(cmd);
}

/* or */
system("/usr/bin/echo $PATH");
0
ответ дан 3 September 2019 в 00:01
поделиться

Если вы спрашиваете, как работает функция поиска команды «type», она просто ищет все каталоги, содержащиеся в переменной среды PATH, пока не найдет указанный файл (который должен быть выполнен пользователем). Это довольно легко реализовать самостоятельно - я не думаю, что есть функция библиотеки POSIX, которая это делает, но я не эксперт по POSIX.

0
ответ дан 3 September 2019 в 00:01
поделиться

Вы всегда можете попробовать загрузить открытый исходный код для whereis, который является стандартным для большинства дистрибутивов Linux, прочитать его и посмотреть, как он реализован.

0
ответ дан 3 September 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: