免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2376 | 回复: 1
打印 上一主题 下一主题

[Linux] 如果一个FD大于1024,就不能和select()一起工作? [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:16:532015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-03-07 09:27 |只看该作者 |倒序浏览
在我的linux系统上,sizeof(fd_set)是128, 这意味着我的select()最大能处理的fd的号码是 128*8-1=1023.
那岂不是说,我打开一个文件fd如果已经很大了,超过1023,就不能和select一起工作?

论坛徽章:
2
15-16赛季CBA联赛之天津
日期:2016-12-20 17:56:18CU十四周年纪念徽章
日期:2017-04-20 16:30:16
2 [报告]
发表于 2017-03-07 15:33 |只看该作者
本帖最后由 lhd666 于 2017-03-07 16:27 编辑

一般来说,是的。其实不管是不是 select,一般进程默认能打开的最大描述符个数都是1024个。
可以通过 ulimit -a 来查看和调整这个限制,在程序中可以使用 getrlimit() 和 setrlimit() 来调整。
如果是需要处理大量网络连接,可以使用 epoll 代替 select,它不受这个限制(具体如何实现的我也不清楚)。

open files这行就是能打开的最大描述符个数
  1. [lh@fedora cgi]$ ulimit -a
  2. core file size          (blocks, -c) unlimited
  3. data seg size           (kbytes, -d) unlimited
  4. scheduling priority             (-e) 0
  5. file size               (blocks, -f) unlimited
  6. pending signals                 (-i) 31475
  7. max locked memory       (kbytes, -l) 64
  8. max memory size         (kbytes, -m) unlimited
  9. open files                      (-n) 1024
  10. pipe size            (512 bytes, -p) 8
  11. POSIX message queues     (bytes, -q) 819200
  12. real-time priority              (-r) 0
  13. stack size              (kbytes, -s) 8192
  14. cpu time               (seconds, -t) unlimited
  15. max user processes              (-u) 31475
  16. virtual memory          (kbytes, -v) unlimited
  17. file locks                      (-x) unlimited
复制代码

评分

参与人数 1信誉积分 +5 收起 理由
cdsfiui + 5 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP