将“uname”传递给execv()时出现“未知命令”错误

时间:2014-11-05 12:56:27

标签: c parsing ubuntu execv

所以我必须在C中构建一个实际上从键盘获取命令的程序,将其拆分为存储在数组中的标记,并使用这些标记作为“execv”(ubuntu中的命令)的输入,我选择了使用参数“-a”命令“uname”,但由于某种原因,它一直说“Comanda necunoscuta!” (未知的命令!)继承我的代码:

#include <stdio.h>
#include<stdlib.h>
#include <string.h>   /*strtok strcpy*/
#include<malloc.h>   /*malloc*/
#include <sys/types.h> /* pid_t */
#include <sys/wait.h>  /* waitpid */
#include <unistd.h>    /* _exit, fork */

int main()
{
    int i=0;
    char *cuvinte[256]; //words
    char comanda[256];  //command

    printf("Introduceti comanda: "); // command input
    fgets(comanda,sizeof(comanda),stdin); // read command
    char *c = strtok(comanda," "); // break command into tokens

    while(c!=0)
    {
        cuvinte[i] = malloc( strlen( c ) + 1 ); //alocate memory
        strcpy(cuvinte[i++],c); // copy them
        printf("%s\n",c);       // print them
        c=strtok(NULL, " ,.!?");
        }
    printf("Sunt %d elemente stocate in array! \n\n",i); // no of elements stored
    printf("Primul cuvant este: %s \n\n",cuvinte[0]); // shows the first token
    if((cuvinte[0]=='uname')&&(cuvinte[1]=='-a')){    // here lays the problem i guess
      /*face un proces copil*/
      pid_t pid=fork();
        if (pid==0) { /* procesul copil*/
        static char *argv[]={"/bin/uname","-a",NULL};
        execv(argv[0],argv);
        exit(127); /*in caz ca execv da fail*/
        }
        else { /* pid!=0; proces parinte */
        waitpid(pid,0,0); /* asteapta dupa copil */
        }
    }
    else printf("Comanda necunoscuta !\n"); // problem
    //getch();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

首先,我没有足够的声誉发表评论,对不起。

我不确定你可以用C中的'=='运算符比较两个字符串。尝试使用strcmp函数。

答案 1 :(得分:2)

首先添加

 cuvinte[1][strlen(cuvinte[1])-1]='\0';

在while循环之后&#34; printf(&#34; Sunt%d elemente stocate in array!\ n \ n&#34;,i);&#34;

第二件事

使用

 if((strcmp(cuvinte[0],"uname")==0) && (strcmp(cuvinte[1],"-a")==0))

而不是&#34; ==&#34;

程序会起作用!!