函数
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 平台上,如果 error
为 NULL
,并且 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 起可用
此函数无法直接用于语言绑定。