我想为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
答案 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。