Files
phs_v1.0.1.0/commonlibrary/c_utils/docs/zh-cn/c-utils-guide-uniquefd.md
2024-09-27 19:16:49 +08:00

7.6 KiB
Raw Permalink Blame History

管理、传递文件描述符

概述

使用c_utils提供的文件描述符封装类而非直接使用整型的文件描述符数值。其使得文件描述符在变量、函数间进行传递时能够保持仅被唯一一个封装类对象持有。传递过程中若一个文件描述符未被一个封装类对象持有其将被关闭以避免重复关闭等问题。

涉及功能

OHOS::UniqueFdAddDeletor

文件描述符管理封装类。用于实现对文件描述符的唯一管理,以避免重复关闭等问题。

具体描述

template <typename Deleter = DefaultDeleter>
class OHOS::UniqueFdAddDeletor;

模板参数:

  • Deleter 指定Deletor类以提供具体关闭文件描述符的方法。默认为DefaultDeleter。

定义上一个UniqueFdAddDeletor对象唯一管理一个文件描述符。 文件描述符的管理权可以在不同的UniqueFdAddDeletor对象间传递当文件描述符没有任何UniqueFdAddDeletor接替管理时其将被关闭。

#include <unique_fd.h>

Public Functions

返回类型 名称
UniqueFdAddDeletor()
无参构造UniqueFdAddDeletor对象此时待管理文件描述符值为-1。
UniqueFdAddDeletor(const int& value)
构造UniqueFdAddDeletor对象传入待管理文件描述符。
UniqueFdAddDeletor(UniqueFdAddDeletor&& rhs)
移动构造函数。用于文件描述符在UniqueFdAddDeletor对象间的传递。
~UniqueFdAddDeletor()
析构函数。将调用UniqueFdAddDeletor::Reset(-1)以关闭当前文件描述符并置为-1
int Get() const
获取当前管理的文件描述符,但并不释放对其的管理。
operator int() const
类型转换运算符。
bool operator!=(const int& rhs) const
不等运算符重载函数。将当前对象管理的文件描述符与输入值比较。
bool operator<(const int& rhs) const
小于运算符重载函数。将当前对象管理的文件描述符与输入值比较。
bool operator<=(const int& rhs) const
小于等于运算符重载函数。将当前对象管理的文件描述符与输入值比较。
UniqueFdAddDeletor& operator=(UniqueFdAddDeletor&& rhs)
移动赋值运算符重载函数。用于文件描述符在UniqueFdAddDeletor对象间的传递。
bool operator==(const int& rhs) const
相等运算符重载函数。将当前对象管理的文件描述符与输入值比较。
bool operator>(const int& rhs) const
大于运算符重载函数。将当前对象管理的文件描述符与输入值比较。
bool operator>=(const int& rhs) const
大于等于运算符重载函数。将当前对象管理的文件描述符与输入值比较。
int Release()
释放对当前文件描述符的管理,将当前被管理文件描述符置为-1。

Friends

名称
bool operator(const int& lhs, const UniqueFdAddDeletor< Deleter >& rhs)
bool operator(const int& lhs, const UniqueFdAddDeletor< Deleter >& rhs)
bool operator!=(const int& lhs, const UniqueFdAddDeletor< Deleter >& rhs)
全局不等运算符重载函数比较输入具体数值与输入UniqueFdAddDeletor对象所管理的文件描述符。
bool operator==(const int& lhs, const UniqueFdAddDeletor< Deleter >& rhs)
全局相等运算符重载函数比较输入具体数值与输入UniqueFdAddDeletor对象所管理的文件描述符。
bool operator>(const int& lhs, const UniqueFdAddDeletor< Deleter >& rhs)
全局大于运算符重载函数比较输入具体数值与输入UniqueFdAddDeletor对象所管理的文件描述符。
bool operator>=(const int& lhs, const UniqueFdAddDeletor< Deleter >& rhs)
全局大于等于运算符重载函数比较输入具体数值与输入UniqueFdAddDeletor对象所管理的文件描述符。

OHOS::DefaultDeleter

Deleter默认实现类包含关闭文件描述符的静态方法。

具体描述

class OHOS::DefaultDeleter;

Deleter默认实现类包含关闭文件描述符的静态方法。

提示: 管理封装类UniqueFdAddDeletor在取消对当前描述符的管理同时又没有其他管理封装类接替管理该描述符时Deleter::Close()方法将被调用。

Deleter类用于关闭文件描述符可以重新实现以自定义对文件描述符的关闭行为。

#include <unique_fd.h>

Public Functions

返回类型 名称
void Close(int fd)
默认文件描述符关闭方法。

使用示例

  1. 测试用例编译运行方法
  • 测试用例代码参见 base/test/unittest/common/utils_unique_fd_test.cpp

  • 使用开发者自测试框架,使用方法参见:开发自测试执行框架-测试用例执行

  • 使用以下具体命令以运行unique_fd.h对应测试用例

run -t UT -tp utils -ts UtilsUniqueFdTest