Unix编程... fork()&execv()帮助... C编程

use*_*514 1 c unix exec

我正在编写自己的unix终端,我遇到了执行命令的问题:

首先,我将用户输入并将其存储到缓冲区中,然后将单词分开并将它们存储到我的argv []数组中.即命令是"firefox"来启动存储在argv [0]中的firefox

如何启动命令?这就是我想要做的,但我遇到了错误:

void launchProcess(char *command[], char *file){
        pid_t pid;
        pid = fork();
        if (pid == -1) {
                perror("Error when forking");
                exit(EXIT_FAILURE);
        }
        if (pid == 0){                  
                fprintf(stderr, "Child pid = %d\n", getpid());
                execv(file, command);
            }
Run Code Online (Sandbox Code Playgroud)

我打电话的时候:

launchProcess(commandArgv, "STANDARD");
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:错误:launchProcess的冲突类型

Jay*_*rod 8

如果您遇到冲突的类型错误,则应确保列出的函数与其声明的类型相同.

此外,您可能已经知道,但execv需要一个完全限定的可执行文件路径,因此像"STANDARD"这样的值不起作用; 使用execvp如果你想使用PATH变量来确定的二进制文件的位置.您还应该确保argv数组中的最后一个值NULL.最后,确保检查返回值execv; 它有可能失败,例如,如果用户试图执行不存在的程序.