仅在安装应用程序时产生进程(c)

时间:2012-03-18 10:07:02

标签: c glib

我想为totem(linux视频应用程序)编写lirc插件,这个lirc插件的一个选项是在“totem”和另一个视频应用程序(“vlc”或“mplayer”)之间切换

执行lirc命令的部分代码:

if (strcasecmp (cmd, "video") == 0)
    {
            gchar **argv;
            exit_totem();
            g_shell_parse_argv ("vlc", NULL, &argv, NULL);
            g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
            g_strfreev (argv);
    }

对于此命令,我只想分配一个值“video”(示例lircrc文件配置):

begin
    prog = totem
    button = MEDIA
    config = video
end

问题:

如果安装了其中一个,如何使lirc插件执行“vlc”或“mplayer”。

行为:

按遥控器按钮MEDIA,如果安装了vlc插件执行vlc,否则如果安装mplayer插件执行mplayer,如果没有安装插件,则插件无法执行任何操作。

在无法解决问题的伪代码中:

if (strcasecmp (cmd, "video") == 0)
    {

     if (vlc installed)
     ------------------
        gchar **argv;
        exit_totem();
        g_shell_parse_argv ("vlc", NULL, &argv, NULL);
        g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
        g_strfreev (argv);

     else (mplayer installed)
     ------------------------
        gchar **argv;
        exit_totem();
        g_shell_parse_argv ("mplayer", NULL, &argv, NULL);
        g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
        g_strfreev (argv);           
}

谢谢和问候,

GEO

1 个答案:

答案 0 :(得分:2)

你不会打电话给:

 gchar **output;
 g_spawn_command_line_sync("which vlc",output,NULL,NULL,NULL); 
 if (!g_str_has_suffix (&output,"which no"))
 {
 // call vlc goes here
 }
 gchar **output2;
 g_spawn_command_line_sync("which mplayer",output2,NULL,NULL,NULL); 
 if (!g_str_has_suffix (&output2,"which no"))
 {
 // call mplayer goes here
 }
 g_strfreev (output); 
 g_strfreev (output2); 

有关使用IO通道读取输出而不仅仅是g_str_has_suffix的更详细示例,请参阅Spawning processes using glib