【发布时间】:2018-03-22 14:29:10
【问题描述】:
tl;dr 是否有一个 posix 描述符值可以放入 close() 并且不会发生任何事情?
是否有我可以使用的特定值,例如用于指针的NULL 用于文件描述符?我希望代码是统一的,所以我认为我可以将源描述符设置为空描述符。
class socket
{
int fd;
public:
//deleted copy operations
socket(socket&& other):
fd{other.fd}
{
other.fd = /*null descriptor*/
}
~socket()
{
if (close(fd) == -1)
{
throw std::runtime_error{strerror(errno)};
}
// ^^ null file descriptor will do nothing on close()
// like delete nullptr;
}
我可以存储一个布尔标志,但我想避免它。
它将使用的操作系统是 Ubuntu 16.04,带有 gcc 5.4。我不能使用 POSIX 和标准库本身之外的任何库,直到 gcc 5.4 中存在的版本。
我尝试阅读 open()、close() 的手册页。他们没有提到要使用的任何特殊价值。
我尝试将其设置为 -1,但不确定是否可以在任何地方安全使用。
【问题讨论】:
-
你想让“NULL 文件描述符”做什么?喜欢
/dev/null? -
@user202729,让我将其添加到问题中。现在清楚了吗?
-
NULL/0是标准输入的 fd。看看这个:stackoverflow.com/a/18507245/4181011 -
@SimonKraemer,我没有使用
NULL作为文件描述符。我试过-1,好像没问题。不知道以后会不会爆炸。 -
每this 负数是要走的路。尽管我没有将其发布为答案,但不熟悉它。
标签: c++ posix file-descriptor