Как открыть файл в программе по умолчанию - Linux - PullRequest
5 голосов
/ 26 мая 2011

Как программно открыть файл в программе по умолчанию в Linux (я использую Ubuntu 10.10).

Например, открытие * .mp3 откроет файл в Movie Player (или что-то еще).

Ответы [ 3 ]

6 голосов
/ 26 мая 2011

Вам нужно запустить 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
2 голосов
/ 24 июля 2012

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;
}

Кстати, xdg-open, сценарий оболочки, пытается определить среду вашего рабочего стола и вызвать известного помощника, например gvfs-open для GNOME, kde-open для KDE или что-то еще gvfs-open в итоге звонит g_app_info_launch_default_for_uri().

0 голосов
/ 16 февраля 2014

Простое решение с меньшим количеством кодирования:

Я тестировал эту программу на своем Ubuntu, и она работает нормально, и если я не ошибаюсь, вы ищете что-то вроде этого


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

int main()
{
    system("firefox file:///dox/song.mp3");
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...