Как найти путь функции Unix system () в C - PullRequest
1 голос
/ 06 июня 2010

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

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

тип 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);


            }
        }

Ответы [ 5 ]

2 голосов
/ 06 июня 2010

Звучит так, будто вы ищете команду which:

$ which ls
/bin/ls
0 голосов
/ 06 июня 2010

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

0 голосов
/ 06 июня 2010

Два способа:

Прежде всего обратите внимание, что 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 голосов
/ 06 июня 2010

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

0 голосов
/ 06 июня 2010

Вы ищете который ?

which <command>

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

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