【问题标题】:how to use exec() without any parameter?如何在没有任何参数的情况下使用 exec()?
【发布时间】:2015-09-29 21:17:19
【问题描述】:

我想通过 exec() 运行“ls”命令,而我的代码是 exec("/bin/ls", NULL),但我得到一个文本显示“A NULL argv[0] was passed through an exec system call 。”如果我添加“all”作为参数,它就可以了。 exec("/bin/ls","all",NULL)

但是,当我使用 exec("/bin/ps", NULL) 时,它可以正常工作。那么你能帮我弄清楚我的程序有什么问题吗?

顺便说一句:我使用 execl()

#include <iostream>
#include <unistd.h>             //required for fork()
#include <sys/types.h>          //required for wait()
#include <sys/wait.h>           //required for wait()

using namespace std;

int main(){
        string cmd="";
        string cmdpath="/bin/";
        cout<<endl<<getcwd(NULL,0)<<" >> ";
        cin>>cmd;
        cout<<endl;
        string cmdCmdpath = cmdpath+cmd;
        const char* charcmd = cmdCmdpath.c_str();

        int x = fork();
        if(x!=0){
                cout<<"The command "<<cmd<<" is running"<<endl;
                wait(NULL);
                cout<<"Im parent!"<<endl;
        }else if (x==0){
                cout<<"Im child!"<<endl;
                execl(charcmd,NULL);
                cout<<"Child done"<<endl;
        }

}

【问题讨论】:

标签: linux kernel call system


【解决方案1】:

仔细阅读execl的说明:

按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。

这意味着,第二个execl 参数应该是路径,与第一个引用相同的文件。通常,第一个和第二个参数是相同的:

execl(charcmd, charcmd, NULL);

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 2013-04-02
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多