将文件双击系统参数获取到应用程序中

将文件双击系统参数获取到应用程序中

我为 LINUX 创建了一个 C++ 图像处理器,双击时会打开一个文件浏览器。当我使用文件名参数从命令行运行它时,它会打开该文件。我配置了我的系统,以便带有图像扩展名的文件将使用我的程序打开。不幸的是,我的程序并没有像在命令行上使用文件名启动时那样打开文件,而是就像没有文件名参数传递给程序一样,并打开文件浏览器。

我的问题是;当双击使用我的程序打开的图像文件时,如何将文件名参数从操作系统获取到我的程序中?我在任何地方都找不到这个信息。我假设文件名位于 argv[1] 中,但显然不是。该程序不需要终端即可运行。

我正在 CENTOS/Linux 7 上运行 Gnome 桌面,均为最新版本。设置一个可以正常工作的桌面图标,通过单击该图标来启动应用程序。问题是,当双击图像文件时,其名称无法到达应用程序,因此浏览器会出现。这很神秘,因为从终端运行时所有命令行参数都可以正常工作。最大的问题是“系统将双击的文件的文件名放在哪里?”

谢谢。

答案1

答案2

已解决:应用程序可以通过命令文件或通过来自另一个进程的流来接受脚本化图像加载和合成命令。为了实现这一点,应用程序在处理参数之前通过决策树顶部的 poll() 系统调用轮询 STDIN。它假设如果 STDIN 不为空,则它包含应用程序的命令流。这导致操作系统创建一个新的 shell 进程来托管应用程序。通过将 poll() 系统调用移至参数处理决策树的末尾,软件将按预期运行。不确定 poll() 系统调用是否是测试 STDIN 是否为空的最佳方法,但它似乎可以用于此目的。结论:编程设计错误。对于提交如此模糊的问题,我深表歉意。

相关内容