exec如何在Linux上运行

时间:2016-01-31 19:49:37

标签: c unix exec

我试图理解exec是如何工作的,现在我仍然坚持这个例子。如果不删除提供的文本中的任何内容,请编辑以下函数,以便程序将命令应用于收到的所有参数以及如何完成此操作?谢谢! :)

int main(int argc, char** argv[]){
for(int i=1; i<argc; i++){
    execlp("cat", "cat", argv[i]);
    printf("Error\n");
    exit(1);
}
return 0;
}

1 个答案:

答案 0 :(得分:2)

execlp()将替换当前进程。

注意:execlp()的最后一个参数必须为NULL

为了避免覆盖当前进程,第一步是调用fork()来创建子进程。

自然允许fork()`

中的每个可能的返回值

然后父进程需要等待子进程退出。

否则,每个运行cat的多个子进程将竞争在终端上显示其输出。

因此父母需要在创建下一个子进程之前等待每个孩子完成

将以上所有结果应用于:

#include <sys/types.h>
#include <sys/wait.h> // waitpid()
#include <unistd.h>   // fork()
#include <stdio.h>    // perror()  
#include <stdlib.h>   // exit(), EXIT_FAILURE


int main(int argc, char* argv[])  // single `*` when using `[]`
{
    pid_t pid;

    for(int i=1; i<argc; i++)
    {
        switch( pid = fork() )
        {
        case -1:
            // handle error
            perror( "fork failed");
            exit( EXIT_FAILURE );
            break;

        case 0: // the child
            execlp("cat", "cat", argv[i], NULL);
            perror("execlp failed");
            exit( EXIT_FAILURE );
            break;

        default:
            // parent
            // wait for child to exit
            waitpid( pid, NULL, 0);
            break;
        } // end switch
    } // end for
    return 0;
} // end function: main