检查程序的其他目录

时间:2012-01-01 11:48:39

标签: c path

所以我正在开展一个小项目,我有这个功能:

void call_execve(char *cmd)
{
    int i;
    char bin[5];
    char full_cmd[100];

    strcpy(bin, "/bin/");

    strcat(full_cmd, bin);
    strcat(full_cmd, cmd);

    if(fork() == 0) {
        i = execve(full_cmd, my_argv, my_envp);
        if(i < 0) {
            printf("%s: %s\n", full_cmd, "command not found");
            exit(1);        
        }
    } else {
        wait(NULL);
    }
}

我想我的大脑今晚没想到,我需要让它检查/ usr / bin目录下的程序或shell命令。

我知道我可以使用$ PATH变量,但我不确定如何通过C语言使用它。如果您可以将此函数重写为从/ usr / bin目录执行程序使用$ PATH执行程序

,那就太棒了

提前谢谢。

盖斯特。

2 个答案:

答案 0 :(得分:1)

来自exec(3)手册页:

  

execlp()execvp()execvpe()函数会复制操作          如果指定的文件 - 搜索可执行文件的shell          name不包含斜杠(/)字符。该文件是在寻求          以PATH环境变量中指定的以冒号分隔的目录路径名列表。

答案 1 :(得分:0)

execvp库函数模仿$PATH中的shell搜索,然后调用execve

如果您想要执行一个文件路径为您所知的程序(例如/usr/bin/mail),那么只需使用完整路径作为第一个文件名execve >论证。