如何在其默认程序中打开文件 - Linux

时间:2011-05-26 18:06:38

标签: c linux

如何以编程方式在Linux的默认程序中打开文件(即时使用Ubuntu 10.10)。

例如,打开* .mp3将在Movie Player中打开文件(或其他内容)。

3 个答案:

答案 0 :(得分:6)

您需要运行 gnome-open,kde-open或exo-open,,具体取决于您使用的桌面。

我相信有一个名为 xdg-utils 的项目试图为本地桌面提供统一的界面。

所以,比如:

snprintf(s, sizeof s, "%s %s", "xdg-open", the_file);
system(s);

注意代码注入。使用用户输入绕过脚本层更安全,所以请考虑以下内容:

pid = fork();
if (pid == 0) {
  execl("/usr/bin/xdg-open", "xdg-open", the_file, (char *)0);
  exit(1);
}
// parent will usually wait for child here

答案 1 :(得分:2)

Ubuntu 10.10基于GNOME。所以,使用它是个好主意 g_app_info_launch_default_for_uri()

这样的事情应该有效。

#include <stdio.h>
#include <gio/gio.h>

int main(int argc, char *argv[])
{
        gboolean ret;
        GError *error = NULL;

        g_type_init();

        ret = g_app_info_launch_default_for_uri("file:///etc/passwd",
                                                NULL,
                                                &error);
        if (ret)
                g_message("worked");
        else
                g_message("nop: %s", error->message);

        return 0;
}

BTW,xdg-open,一个shell脚本,尝试确定您的桌面环境并为GNOME调用gvfs-open之类的已知助手,为KDE调用kde-open或其他东西。 gvfs-open最终会调用g_app_info_launch_default_for_uri()

答案 2 :(得分:0)

编码较少的简单解决方案:

我已经在我的Ubuntu上测试了这个程序并且它工作正常,如果我没有错,你正在寻找这样的东西


#include <stdio.h>
#include <stdlib.h>

int main()
{
    system("firefox file:///dox/song.mp3");
    return 0;
}