gpt4 book ai didi

c++ - open 的返回值 ("dev/null",O_APPEND) 可以表示打开的文件太多了吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:12 27 4
gpt4 key购买 nike

我无法理解下面的代码。当reservedFd_ == -2时,表示接受了两个很多的clients,为什么?非常感谢。

// In one function.
...
...
reservedFd_ = ::open("/dev/null", O_APPEND);
if (-1 == reservedFd_)
{
LOG_DEBUG("Failed to open reserved file!, errno: %d", errno);
}

...
...
...
----------------------------------------------------------------------
// then in other function we accept a new client socket
void TCPServer::HandleAccept( const boost::system::error_code& _err )
{
if (!_err)
{
// too many clients accepted? why?
if (-2 == reservedFd_)
{
boost::system::error_code ignored_ec;
session_->GetSocket().close(ignored_ec);
}
else
{
...
}

}

...
}

最佳答案

open(2) 返回一个新的文件描述符,如果发生错误则返回 -1。 errno 会告诉你失败的具体原因。如果打开的文件描述符太多,那么您应该获取 EMFILE 或 ENFILE。使用 strerror(3) 获取可读的错误消息。

LOG_DEBUG("Failed to open reserved file: %s", strerror(errno));

open(2) 不应返回 -2。那将是违反 POSIX.1 规范的未记录的返回码。这会导致世界上大量未预料到的程序出现问题。

关于c++ - open 的返回值 ("dev/null",O_APPEND) 可以表示打开的文件太多了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13964782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com