linux C语言 文件相关知识01

ps:文件描述符表,与文件指针 有什么联系???
1.
linux 系统,一般一个进程 允许打开的最大文件数量是 1024, 对应内核区的进程控制块(pcb)中的文件描述符表的范围,
在shell输入 ulimit -a 就可以查看 open files 为1024。
在Linux系统中一切皆文件。如果要对某个设备进行操作,打开此设备文件,只要你打开文件就会获得该文件的文件描述符fd(file discriptor),这个文件描述符就是一个整数。
文件描述符就是这个文件描述符表的索引,文件描述符从0开始到1023;
2.
文件描述符的分配规律:从当前未使用的最小的整数处开始分配 。比如说如果你打开一个文件系统会自动为它打开三个文件,分别是stdin,stdout,stderr,就是标准输入,标准输出,标准输出。他们的文件描述符分别是 0,1,2,也就是说当你的文件打开时它的文件描述符就从3开始分配了,如果你把那三个文件关闭一个,例如,关掉标准输入,则打开的文件的文件描述符将会填上0,让后再往后分配。
3.
每个进程在PCB(Process Control Block)即进程控制块中都保存着一份文件描述符表,文件描述符就是这个表的索引,文件描述表中每个表项都有一个指向已打开文件的指针。已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。
fd为打开文件的文件描述符,而每个进程都有一张文件描述表,fd文件描述符就是这张表的索引,同样这张表中有一表项,该表项又是指向前面提到打开文件的file结构体,file结构体才是内核中用于描述文件属性的结构体

这段代码,能输出一个进程能打开多少文件

int main() {
    int num = 0;
    int fd;
    while(1) {
        fd = open("1.txt", O_RDONLY|O_CREAT|O_TRUNC, 0777);
        if(fd<0) {
            break;
        }
        num++;
        printf("%d\n", fd);
    }
    printf("---\n");
    printf("%d\n", num);
    perror("1.txt");
    return 0;
}

在这里插入图片描述

在这里插入图片描述
参考:
https://blog.csdn.net/chan0311/article/details/72793411

下面这个链接的文章写的非常好
https://blog.csdn.net/qq_28114615/article/details/94590598

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值