首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭[关闭(3)]和清除[fd_clr(3)]文件描述符有什么区别?

关闭[关闭(3)]和清除[fd_clr(3)]文件描述符有什么区别?
EN

Stack Overflow用户
提问于 2019-06-25 18:26:38
回答 3查看 305关注 0票数 0

我在自动化软件测试中遇到了问题,当我在fd中使用fd_clr(3)后使用close(3)时,这种测试正在指责使用释放的资源。这样做有什么不对吗?

代码语言:javascript
复制
for(i = 0; i < nfds; ++i) {
    if (FD_ISSET(i, &myFdSet)) {
        close(i);
        FD_CLR(i, &myFdSet);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-25 18:29:51

FD_CLR()只更改本地fd_set,这是一个C数据结构,用于存储有关文件描述符列表的信息。

close()是关闭文件描述符的系统调用。

fd_set用于select()系统调用。使用select(),您可以获得存储在fd_set结构中的文件描述符列表的状态信息。

您看到FD_CLR()就在close()下面的原因是,询问状态是否关闭文件描述符不再有必要/目的。

票数 2
EN

Stack Overflow用户

发布于 2019-06-25 18:34:09

因此,FD_ISSET和FD_CLR是pselect的一部分,请在手册页( CLR.3.html )中阅读更多内容。

在下一次调用pselect时,它基本上是管理所有要等待的文件号的列表,因此清除已关闭的文件是有意义的。

您的代码正在询问,对于我正在侦听的所有文件,请关闭该文件并从集合中移除。

关闭()实际上关闭文件。不应该在同一个文件上多次调用close,否则会看到此错误。也许还有其他一些代码也在关闭该文件?

票数 1
EN

Stack Overflow用户

发布于 2019-06-25 18:39:08

如果软件真的在标记FD_CLR的使用,那么自动化的软件就会崩溃。您正在中从监视集中移除关闭的文件描述符,而FD_CLR正是这样做的方法。

作为一种解决方案,您可以转换close()FD_CLR,这不会改变代码的含义,但会满足错误分析工具的要求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56760028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档