本文主要是介绍linux文件描述符和套接字的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
记得刚学linux的时候 就会听到一句"一切皆文件" 上面标准输入 标准输出 标准错误 重定向 blablabla...
今天在写一个基于epoll的聊天室 客户端fork 父进程负责读 子进程负责写 感觉这好像服务端 主从备份..还像nginx中的进程的模型,各个worker 从 listen 后的 master fork出来的 master负责分发 worker负责处理 主要是映射到各个模块进行处理 所以说nginx 真正工作的是各个模块.其实 以上都是我学习的一些感受,时常联系在一起 做一些对比 感觉很有意思,也会加深理解.
我们知道 linux下 0 是标准输入 1是标准输出 2 是标准错误 当然以上所得是文件描述符 其实套接字底层也是文件描述符 只不过这个文件描述符的功能不同罢了 文件描述符 和内存有很大的关系 以下这个命令可以查看:
cat /proc/sys/fs/file-max 394682
这一点在nginx中体现的更鲜明一点 因为nginx需要处理 客户端的连接 所以要维持与客户端的socket连接 高并发 因此维持很多这样的socket
以上可以看到 服务端先创建一个文件描述符 3 然后在内核又创建一个epollfd 句柄 为 4
int epoll_create(int size);是这个函数来做的
所以在epoll 用完之后要记得 close 否则有可能导致fd消耗殆尽.
新建立一个客户端 连接到server fd 为 5
这篇关于linux文件描述符和套接字的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!