如何以編程方式在Linux的默認程序中打開文件(即時消息使用Ubuntu 10.10)。如何在其默認程序中打開文件 - Linux
例如,打開* .mp3將在Movie Player(或其他)中打開該文件。
預先感謝您。
斯捷潘
如何以編程方式在Linux的默認程序中打開文件(即時消息使用Ubuntu 10.10)。如何在其默認程序中打開文件 - Linux
例如,打開* .mp3將在Movie Player(或其他)中打開該文件。
預先感謝您。
斯捷潘
您需要侏儒開,KDE開或外開,這取決於你所使用的桌面運行。
我相信有一個項目叫做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
'xdg-open'會調用適當的一個。 – ninjalj 2011-05-26 18:12:38
@ninjalj,非常好,我希望pkg能夠做到這一點。我認爲這是Chrome使用的。 – DigitalRoss 2011-05-26 18:14:32
雖然我建議使用'execv *'而不是'system'。 – ninjalj 2011-05-26 18:15:14
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腳本,試圖determin您的桌面環境,並調用一個已知的幫手像gvfs-open
爲GNOME,kde-open
對於KDE,或別的東西。 gvfs-open
最終致電g_app_info_launch_default_for_uri()
。
如果應用程序已經依賴於GNOME,我更喜歡這種方法。 – Serrano 2013-10-02 10:19:52
用更少的編碼簡單的解決方案:
我測試過在我的Ubuntu這個程序,它工作正常,如果我沒看錯你正在尋找這樣的事情
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("firefox file:///dox/song.mp3");
return 0;
}
Ubuntu默認配備了firefox,如果你可以從你的終端運行'firefox'命令....你可以正確....看看我的解決方案....看看這是否工作對你來說 – 2014-02-15 20:05:34