c - exec() 不适用于 Firefox

标签 c firefox exec fork argv

我一直在使用 fork()exec() 的组合在 Linux 上执行一些外部命令,但是,每当我尝试时,代码似乎都会失败执行 /usr/bin/firefox 这是一个到真实二进制文件的符号链接(symbolic link)。

有谁知道这个问题怎么解决吗?我已经用其他程序进行了测试(它们实际上是可执行二进制文件,而不是它们的符号链接(symbolic link))并且它有效。

这是该程序的代码:

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

int main(int argc, char **argv) {
  pid_t pid;
  // this was the old line:
  // char *parmList[] = {"", "index.html", NULL};
  // and this is the one that solves the problem:
  char *parmList[] = {"firefox", "index.html", NULL};
  int a;

  if ((pid = fork()) == -1)
    perror("fork failed");

  if (pid == 0) {
    a = execvp("/usr/bin/firefox", parmList);
    fprintf(stdout, "execvp() returned %d\n", a);
    fprintf(stdout, "errno: %s (%d).\n", strerror(errno), errno);
  }
  else {
    waitpid(pid, 0, 0);
  }

  return 0;
}

编辑:我更新了代码以包含答案并更改了主题的标题,因为问题实际上似乎根本不是由于符号链接(symbolic link)造成的。谢谢大家。

最佳答案

您可能想在execvp之后添加一些代码以输出一些诊断信息(即检查errno,打印一些有意义的;)) .

您还可以尝试使用strace来分析它而不需要修改源代码。或 gdb 就此事而言。

另请参阅:execve .

根据评论进行后续更新
Firefox 对 argv[0] 为空不满意,不幸的是,这就是 argList 的样子。

经验教训:彻底了解您作为 argv 传递给您执行的程序的内容。 :)

关于c - exec() 不适用于 Firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4481001/

相关文章:

c - 消除c中图像旋转的舍入误差

c - 为什么我的数组打印出副本?

c - 一个简单的 C 代码,但在 Suse 中编译会产生许多错误

javascript - firefox 33 中 window.crypto.signText 的替代品

c - 柔性/Bison : Comma-separated linked list?

Javascript:无法在 Selenium 中使用 Firefox 浏览器

javascript - 为什么在 JavaScript 中使用 getRangeAt() 会从选择中删除一些内容?

Python 执行通过套接字接收的命令时出现问题

c++ - fork 和执行的程序不返回到控制台

python - exec()在函数python3.x中不起作用