【问题标题】:Main Window closes after execvp() callexecvp() 调用后主窗口关闭
【发布时间】:2020-03-03 19:03:17
【问题描述】:

我正在学习 QT 和 QT Creator 以获得使用它的经验。将 Arch Linux 与最新的 QT 库一起使用。

在按钮单击功能上,我正在尝试执行以下操作:

std::string name= filename.toStdString();
char *file_path = (char*)name.c_str();

char *myargs[] = {"wormhole", "send", file_path, NULL};
int rc = execvp(myargs[0], myargs); /*This call is the question*/

int rc 声明发生的地方,这个类产生的主窗口关闭。我不确定为什么。也许execvp() 不是运行其他程序的正确调用?

此调用会将完整文件路径作为参数传递给 wormhole,它可能存在于 /usr/bin 或 /usr/local/bin 中,因此调用 execvp()

【问题讨论】:

  • 也许execvp 是不正确的调用来实现什么?代码应该做什么?
  • @idclev 我正在尝试调用另一个程序,将文件名作为 c 字符串参数传递。它确实成功并打印到标准输出,但我不再有主窗口。
  • 文件名和路径是什么?请在问题中包含该信息
  • 当 execvp() 实际运行另一个程序时,这与我的问题无关。
  • 如果它与问题无关,那为什么是这个问题? “也许 execvp() 不是正确的调用方式?” ...

标签: c++ linux qt


【解决方案1】:

当前进程正在被新的实例化进程替换。

exec() 系列函数用新的进程映像替换当前进程映像。

Execvp Linux man page

您可能希望先 fork(),然后使用 execvp()。

【讨论】:

  • 在这种情况下我完全忘了使用fork(),然后我会使用子进程来执行另一个程序。现在可以完美运行了!
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多