在 C 中使用 execve() 调用 "pbmtextps" 失败?
Failed to call "pbmtextps" with execve() in C?
在我的 Linux 终端上,当我输入
pbmtextps cat | pamfile
然后按回车键。
它给了我以下输出,
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"。我运行同一终端同一目录下的程序
execve()
不会搜索程序到 运行 的路径,因此您需要给它一个有效的绝对或相对文件名。它也不使用 shell,因此您正在尝试的管道不会起作用。参数全部直接传递给正在执行的程序。
它也不会 return 成功,因为 return 到 没有任何意义,所以打印成功消息没有意义。
在我的 Linux 终端上,当我输入
pbmtextps cat | pamfile
然后按回车键。
它给了我以下输出,
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"。我运行同一终端同一目录下的程序
execve()
不会搜索程序到 运行 的路径,因此您需要给它一个有效的绝对或相对文件名。它也不使用 shell,因此您正在尝试的管道不会起作用。参数全部直接传递给正在执行的程序。
它也不会 return 成功,因为 return 到 没有任何意义,所以打印成功消息没有意义。