【问题标题】:Getting the open file limit获取打开文件限制
【发布时间】:2018-07-19 11:16:03
【问题描述】:

是否可以在 C++ 中可移植地访问可以在当前进程中同时打开的最大文件数(例如,在 unix 系统上 ulimit -n 的结果)?我正在用 C++ 编写一个应用程序,它可能需要数百个打开的文件,通常超过系统默认的最大值。超过最大打开文件限制通常会导致难以诊断崩溃,尤其是在大多数用户不知道该限制的情况下。如果我知道启动时的限制,我可能会警告用户潜在的问题,或者在出现问题时提供更好的错误消息。

【问题讨论】:

  • 根据目标操作系统定义“便携”。
  • 至少 Linux、OS X 和 Windows。
  • sysconf(_SC_OPEN_MAX)..
  • POSIX getrlimit(RLIMIT_NOFILE)
  • #include <stdio.h> 并使用宏 FOPEN_MAX

标签: c++ file-io


【解决方案1】:

在与 POSIX 兼容的系统(我认为包括 Windows)中:

#include <sys/resource.h>

struct rlimit lim;
getrlimit(RLIMIT_NOFILE, &lim);
rlim_t max_files = lim.rlim_cur;

【讨论】:

  • Windows 不是 POSIX 系统
  • @RemyLebeau Wikipedia 说“Windows C 运行时库和 Windows 套接字 API 实现了用于文件、时间、环境和套接字访问的常用 POSIX API 函数,[33] 尽管支持在很大程度上仍然不完整并且不能与 POSIX 兼容的实现完全互操作。”
  • 拥有一些与 POSIX 兼容的功能并不能使其成为 POSIX 系统
  • 把我的回答改成 POSIX 兼容。
  • Windows 本身没有 getrlimit() 函数,所以我想这取决于您使用的是哪个供应商的 C 库实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2014-12-07
  • 1970-01-01
  • 2018-01-06
  • 2014-02-28
  • 2012-10-04
相关资源
最近更新 更多