无法在C中使用execve()调用“ pbmtextps”?

时间:2018-11-10 23:23:35

标签: c linux exec system

在Linux终端上,当我输入

pbmtextps cat | pamfile

然后按Enter。

它给了我以下输出,

stdin:  PBM raw, 83 by 104

但是,我试图通过在主程序中使用execve()来调用“ pbmtextps”。以下是该程序的代码段:

char* haha[] = {"pbmtextps","cat","|", "pamfile", NULL};
if(execve("pbmtextps",haha, NULL) == -1){
    fprintf(stderr, "%s\n", "NOT ok");
   }
else{
    fprintf(stdout, "%s\n", "OK");
}

程序启动后,程序打印“ Not ok”。我在同一终端的同一目录中运行该程序。

1 个答案:

答案 0 :(得分:2)

execve()不会搜索要运行的程序的路径,因此您需要为其提供有效的绝对或相对文件名。它还不使用外壳,因此您尝试的管道操作将无法正常工作。所有参数都直接传递给正在执行的程序。

它也不会成功返回,因为没有什么可以返回,因此打印成功消息没有意义。