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,但我不确定在任何地方使用都是安全的。
答案 0 :(得分:4)
文件描述符的减1值可以在close
调用中使用,除了关闭返回-1
本身之外,对应用程序没有任何不利影响。
由于负数保证永远不会是有效的文件描述符,因此它是安全的。