c/c++:文件IO(Linux系统IO、C标准库IO、标准C 库IO和 Linux系统IO的关系、虚拟地址空间、文件描述符表和文件描述符、dup,dup2,fcntl函数)

本文详细介绍了Linux系统IO与C标准库IO的关系,强调了Linux系统IO的无缓冲区特性。深入探讨了虚拟地址空间的概念,并讲解了文件描述符表和文件描述符的作用。此外,文章还重点阐述了dup、dup2和fcntl函数的使用,以及Linux系统IO函数如open、close、read、write等的用途。
摘要由CSDN通过智能技术生成

目录

一、Linux系统IO和C标准库IO

1.1 标准C库IO函数

1.2 标准C 库IO和 Linux系统IO的关系

二、 虚拟地址空间

三、文件描述符表和文件描述符

6.1 dup和dup2函数

dup  复制文件描述符

dup2 重定向文件描述符

fcntl

四、Linux系统IO函数

五、Linux其他系统函数


 

 

一、Linux系统IO和C标准库IO

1.1 标准C库IO函数

 

1.2 标准C 库IO和 Linux系统IO的关系

标准C 库IO:带缓冲区

Linux系统IO:不带缓冲区,(有些书上说Linux系统有缓存,那是内核的缓存,不是IO的缓存)

 

 

 

二、 虚拟地址空间

下图以32位机为例,2的32次方为4G,64位机是2的64次方,太大了不好画。

 

三、文件描述符表和文件描述符

  • 文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。
  • 每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

文件描述符表默认大小: 1024,每个进程启动之后, 都有一个文件描述符表,所以每个进程默认能打开的文件个数: 1024
前三个文件文件描述符是默认被使用了的:  - 标准输入 -> 0, 标准输出 -> 1, 标准错误 -> 2

除去被占用的每个进程默认能打开的文件个数: 1021

 

6.1 dup和dup2函数

  • dup  复制文件描述符

#include <unistd.h>

int dup(int oldfd);

例子:
int ret = dup(3); 

值==3的文件描述符指向一个文件a.txt,返回值是从空闲的文件描述符表中找到的最小的一个, 这时候 4 也指向a.txt

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值