POSIX中是否有空文件描述符值?

时间:2018-03-22 14:29:10

标签: c++ posix file-descriptor

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,但我不确定在任何地方使用都是安全的。

1 个答案:

答案 0 :(得分:4)

文件描述符的减1值可以在close调用中使用,除了关闭返回-1本身之外,对应用程序没有任何不利影响。

由于负数保证永远不会是有效的文件描述符,因此它是安全的。