0

当我执行以下代码并将参数作为“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);
    }
4

1 回答 1

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)
    {
于 2013-09-30T12:12:58.843 回答