关于构建shell时的fork()

时间:2015-03-27 12:07:17

标签: c++ c linux shell

这是我的代码。

pid_t fpid=fork();
if(fpid > 0){
    wait(&fpid);
}
else{
    do_command();
}

问题是,函数do_command()只执行一行,所以我为此更改了do_command():

else{
    execlp("/bin/ls","ls","-al",NULL);
    cout<<"\ntest<<endl;
}

此外,执行了ls命令但缺少cout命令..

我的代码出了什么问题?

请原谅我可怜的英语并帮助我。

这是我的do_command()函数声明:

void do_command(const char *command) {

    //all commands with arguments


    const char *kernel_address = "/bin/";
    char *kernel_command;
    strcpy(kernel_command, kernel_address);
    strcat(kernel_command, command);

    cout << "\nCommand is:" << kernel_command << "\n" << endl;

    execlp(kernel_command, command, NULL);


}

此外,在子进程中调用函数时没有任何输出

2 个答案:

答案 0 :(得分:0)

下一行不打印,因为exec系列命令仅在出错时返回。如果没有错误,它将替换您的程序,并执行在exec中执行的任何命令。因此cout无法正常工作

答案 1 :(得分:0)

来自the manual of execlp

  

exec()系列函数用新的过程映像替换当前过程映像。

调用execlp后,您的程序就不再运行了。它已被ls取代。因此,它永远不会达到cout