【问题标题】:zenity throws glibc errorzenity 抛出 glibc 错误
【发布时间】:2012-06-04 10:39:58
【问题描述】:

我一直在尝试在 shell 脚本中使用 zenity 和标准重定向,比如

for i in $(seq 1 10);回声 $i;完成 | zenity --list --column ="数字"

但在命令行上这可行,但会引发以下警告:

(zenity:3328): GLib-WARNING **: 无效的文件描述符。

这似乎只有在数据通过管道重定向到 Zenity 命令时才会发生。

谁能告诉我这个警告意味着什么?

【问题讨论】:

  • 请注意我使用的是 Ubuntu 11.10

标签: linux ubuntu-11.10 zenity


【解决方案1】:

此错误是通过尝试关闭 stdin 两次触发的 - 一次是在从序列中读取所有数据之后,然后第二次因为它即将退出 - 这是在 zenity 源中。这纯粹是装饰性的,可以安全地忽略 - zenity 代码除了在此时退出之外什么都不做。

在处理程序zenity_tree_handle_stdin 中,在例程结束时它会关闭相同的通道(在函数和全局范围内使用相同的命名变量会导致变量隐藏):

if ((condition != G_IO_IN) && (condition != G_IO_IN + G_IO_HUP)) {
  g_io_channel_shutdown (channel, TRUE, NULL);
  return FALSE;
}

tree.c ~line 648 中,程序即将退出:

  if (channel != NULL)
    g_io_channel_shutdown (channel, TRUE, NULL);

这两个代码路径都会尝试关闭同一个通道,从而导致警告。因为在第 648 行之后要做的下一件事是发出gtk_main_quit,所以我认为可以安全地忽略该警告。

【讨论】:

  • 感谢Petesh,我也认为可以安全地忽略该警告。这里奇怪的事实是,该警告仅出现在 Linux 的某些灾难中,例如,它似乎不会在 Fedora 上发生。 T
  • 似乎 zenity 是由针对不同 Linux 发行版的不同代码库构建的。
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2015-07-20
  • 2014-12-28
  • 1970-01-01
  • 2015-03-24
相关资源
最近更新 更多