【问题标题】:Failed to call "pbmtextps" with execve() in C?无法在 C 中使用 execve() 调用“pbmtextps”?
【发布时间】:2018-11-10 23:23:35
【问题描述】:

在我的 Linux 终端上,当我输入

pbmtextps cat | pamfile

然后按回车键。

它给了我以下输出,

stdin:  PBM raw, 83 by 104

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

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”。我在同一终端上的同一目录中运行程序。

【问题讨论】:

    标签: c linux exec system


    【解决方案1】:

    execve() 不会搜索程序运行的路径,所以你需要给它一个有效的绝对或相对文件名。它也不使用外壳,因此您尝试的管道操作不起作用。参数都直接传递给正在执行的程序。

    它也不会返回成功,因为没有什么可以返回,所以没有必要打印成功消息。

    【讨论】:

    • 我还有一个问题。对于第一个参数,它必须是有效的文件路径。但是,如果我想运行内置命令,例如“ls”,我必须将“/bin/ls”作为第一个参数传递,它可以工作。但是,bin 文件夹中没有名为“ls”的文件。为什么会起作用?
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2014-03-05
    • 2019-09-25
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多