我如何检查exec功能是否失败或成功?

时间:2013-11-11 12:55:30

标签: linux shell operating-system

我得到了编写一个简单的linux shell的任务, 这是到目前为止的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h> 
#include <sys/types.h>

int main(int argc,char argv[])
{
char *token;
char command[50];
char tmp[256];
char *arg_command[]={"",0};
int pid,status,flag=0;


char *path = (char*)getenv("PATH");


while(1) // run always
{
    printf("\n");
    printf(getenv("PWD")); //print current dir 
    printf(": ");
    gets(command);

    if (strcmp(command,"exit")==0) //check for exit command
    {
        printf("bye\n");
        break;
    }

    strcpy(tmp,path);
    token = strtok(path,":");

    while(token!=NULL)
    {
        arg_command[0] = command;
        pid = fork();
        if(pid>=0)
        {
            printf("\npid is:%d\n",pid);
            if (pid==0) // child process is invoked
            {

                strcat(token,"/");
                execv(strcat(token,command),arg_command);
                exit(0);

            }
            else //parent process 
            {

                wait(&status);
                if(status==0)
            }
        }
        else
        {
            printf("fork faild");
        }

        token = strtok(NULL,":");   
    }

    if (flag == 1)
    {
        printf("no files or folders match this command\n");
    }

    strcpy(path,tmp);   


}
    return 0;

}

我的问题是如何知道execv是否能够执行命令 因为我想在用户输入错误命令时输出错误。 我也有一面旗帜,但因为我无法检查execv我无法使用它。

1 个答案:

答案 0 :(得分:0)

与大多数Unix / POSIX函数一样,exec *如果失败则返回错误代码(-1)。然后errno将告诉您失败的原因。

事实上,如果他们回来了,那就出问题了。否则,当前进程被替换,这意味着执行后没有代码(在您的情况下为exit(0))。