网络编程IO

标准C库IO函数与Linux系统IO函数
文件输入输出站在内存的角度:输入是文件→内存,输出是内存→文件
标准C库IO函数
FILE *fopen(const char *filename, const char *mode)
返回值(FILE * fp):
文件描述符(文件指针),索引到对应的磁盘文件
文件读写指针位置:在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在文件打开时,该指针总是指向文件的第一个字节。
注意:这个文件内部的位置指针与C语言中的指针不是一回事。位置指针仅仅是一个标志,表示文件读写到的位置,也就是读写到第几个字节,它不表示地址。文件每读写一次,位置指针就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对用户是隐藏的。
I/O缓冲区(内存地址):通过寻址找到对应的内存块并将数据从内存刷新到磁盘
刷新方法:
刷新缓冲区:fflush
缓冲区已满(默认Buffer 8192byte)
正常关闭文件:a.fclose b.return(main函数) c.exit(main函数)
直接调用标准C库的I/O会有缓冲区存在,在系统内部传递文件时效率高(可以减少系统I/O执行次数)
在网络传输时选用系统I/O可以提高网络通信效率(及时发送文件)
虚拟地址空间
32位计算机的虚拟地址空间是2的32次方,大约4G
64位计算机的虚拟地址空间是2的48次方
虚拟地址空间会被CPU中的MMU映射到真实的物理内存上
用户区的受保护的地址:例如NULL
堆空间从低地址向高地址存储,栈空间从高地址向低地址存储
内核区无法直接操作,需要调用Linux系统的API,我们可以通过Linux系统的某些API函数来完成需求
程序文件仅仅占用磁盘空间,程序执行起来才会占用内存空间
文件描述符
PCB就是一个复杂的结构体,文件描述符表是一个数组,比如一个应用程序需要控制10个文件的读写,要对应有10个文件描述符组成一个数组,也就是文件描述符表,大小默认是1024,一个进程最大可以打开文件的个数就是1024个
标准输出,标准输入,标准错误是指向当前终端的设备文件,在Linux系统中,万物皆为文件
多次使用fopen打开同一个文件,FILE*中的文件描述符不是一个,当调用fclose后文件描述符才会被释放
文件描述符从小到大寻找
Linux系统IO函数
open
create
read write
lseek
stat

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值