函数

GLibclear_fd

自 2.76 起

声明 [src]

static inline gboolean
g_clear_fd (
  int* fd_ptr,
  GError** error
)

说明 [src]

如果 fd_ptr 指向一个文件描述符,关闭它并返回关闭是否成功,这就像 g_close()。如果 fd_ptr 指向一个负数,返回 TRUE 且不关闭任何内容。在这两种情况下,在返回之前将 fd_ptr 设置为 -1

与 g_close() 一样,如果关闭文件描述符失败,错误会存储在 %errno 和 error 中。如果此函数成功,%errno 是不确定的。

POSIX 平台上,如果 errorNULL,并且 fd_ptr 指向一个负数或一个有效的打开文件描述符,则此函数是异步信号安全的。这使其在满足这些条件的情况下,可以从信号处理程序或 GSpawnChildSetupFunc 中进行安全的调用。参见 signal(7)signal-safety(7) 以获取更多详情。

fd_ptr 指向一个不是有效文件描述符的非负数是一种编程错误。

此函数的一个典型用法是在其范围结束时清理一个文件描述符,无论它是否已成功设置。

gboolean
operate_on_fd (GError **error)
{
  gboolean ret = FALSE;
  int fd = -1;

  fd = open_a_fd (error);

  if (fd < 0)
    goto out;

  if (!do_something (fd, error))
    goto out;

  if (!g_clear_fd (&fd, error))
    goto out;

  ret = TRUE;

out:
  // OK to call even if fd was never opened or was already closed
  g_clear_fd (&fd, NULL);
  return ret;
}

此函数也可以与 #g_autofd 一起使用。

自 2.76 起可用

此函数无法直接用于语言绑定。

参数

fd_ptr

类型: int*

指向文件描述符的指针。

参数会被函数修改。
error

类型: GError **

可恢复错误 的返回位置。

参数可以是 NULL
如果返回位置不是 NULL,那么必须将其初始化为 NULL GError*
如果不存在错误,参数会被函数初始化并保留为 NULL
在错误的情况下,此参数将被设置为一个新分配的 GError;调用方将拥有数据的所有权并负责释放数据。

返回值

类型: gboolean

在成功时为 TRUE