【问题标题】:execlp gives abort trap 6execlp 给出中止陷阱 6
【发布时间】:2013-09-30 10:37:32
【问题描述】:

当我执行以下代码并将参数作为 "ls - l" 时,我得到中止陷阱:6 并且程序退出。但是当我只是将 ls 作为输入时,程序工作正常。为什么会这样。

这里 :act_arg 包含字符串 "ls" "-l"

 void function_run()
    {
        char bar[100] = "/bin/";
        char f_arg[100];
        int baz;
        int qux = 1;
        strncat(bar,act_arg[0],sizeof(act_arg[0]));
        while(act_arg[qux] != NULL)
        {
            strncat(f_arg,act_arg[qux] ,sizeof(act_arg[qux]));
        }

        //execute
        if(fork() == 0)
        {
            baz = execlp(bar,act_arg[0],act_arg[1],NULL);
            if(baz == -1)
            {
                eng_run();      //to run execlp from normal lang run
                //wait(NULL);
            }
            else
            {
                //wait(NULL);
                exit(0);
            }
        }
        fflush(stdout);
    }

【问题讨论】:

    标签: c system call


    【解决方案1】:

    这是错误的:

    if(fork() == 0)
    {
        baz = execlp(bar,act_arg[0],act_arg[1],NULL);
        if(baz == -1)
        {
    

    您需要将包括“ls”在内的所有参数发送到 execlp :

    if(fork() == 0)
    {
        baz = execlp(bar,act_arg[0],act_arg[0],NULL);
        if(baz == -1)
        {
    

    或者顺便说一句:

    if(fork() == 0)
    {
        baz = execve(act_arg[0], &act_arg[1]); //&act_arg[0] I don't remember
        if(baz == -1)
        {
    

    【讨论】:

    • 这两种情况都不起作用,execve 应该有 3 个参数而不是 2 个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多