• Linux编程--文件描述符fd


      linux中, 每一个进程在内核中,都对应有一个“打开文件”数组,存放指向文件对象的指针,而 fd 是这个数组的下标。

        我们对文件进行操作时,系统调用,将fd传入内核,内核通过fd找到文件,对文件进行操作。

        既然是数组下标,fd的类型为int, < 0 为非法值, >=0 为合法值。在linux中,一个进程默认可以打开的文件数为1024个,fd的范围为0~1023。可以通过设置,改变最大值。

        在linux中,值为0、1、2的fd,分别代表标准输入、标准输出、标准错误输出。在上一篇文章中,使用重定向 2>/dev/null 就是把标准错误输出重定向到位桶中去,不显示出来。因为 0 1 2已经被linux使用了,通常在程序中打开的fd,是从3开始的。但我们在判断一个fd是否合法时,依然要使用>=0的判断标准。

        fd的分配原则,是从小到大,找到第一个不用的进行分配。

        除了open之外, socket编程的socket()/accept()等函数,也会返回一个fd值。

        1)Linux系统下,所有进程允许打开的最大fd数量。查询语句:

            /proc/sys/fs/file-max
        2)Linux系统下,所有进程已经打开的fd数量及允许的最大数量。查询语句:

            /proc/sys/fs/file-nr
        3)单个进程允许打开的最大fd数量.查询语句:

            ulimit -n
        4)单个进程(例如进程id为5454)已经打开的fd.查询语句:

            ls -l /proc/5454/fd/

    =========================

    工作机会(内部推荐):发送邮件至gaoyabing@126.com,看到会帮转内部HR。

    邮件标题:X姓名X_X公司X_简历(如:张三_东方财富_简历),否则一律垃圾邮件!

    公司信息:

    1. 1.东方财富|上海徐汇、南京|微信客户端查看职位(可自助提交信息,微信打开);
  • 相关阅读:
    ios UIImageView
    ios UILable
    [leetCode]116. 填充每个节点的下一个右侧节点指针
    [leetCode]1002. 查找常用字符
    [leetCode]199. 二叉树的右视图
    [leetCode]784. 字母大小写全排列
    [leetCode]1297. 子串的最大出现次数
    [leetCode]1239. 串联字符串的最大长度
    1095. 山脉数组中查找目标值
    [leetCode]1235. 规划兼职工作
  • 原文地址:https://www.cnblogs.com/Chary/p/14296584.html
Copyright © 2020-2023  润新知