webserver 标准C库函数和内存模型

📕作者简介:热编程的贝贝,致力于C/C++、Java、Python等多编程语言,热爱跑步健身,喜爱音乐的一位博主。
📗本文收录于贝贝的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏深度学习、目标检测系列等,大家有兴趣的可以看一看
📙C++零基础入门系列,Web入门篇系列正在发展中,喜欢Python、C++的朋友们可以关注一下哦!
📗如有需要此项目工程,请评论区留言哦 也可联系作者微信 Qwe1398276934,速度更快!

程序是在内存当中,应该以内存为中心去看输入和输出

FILE 结构体

FILE 结构体
struct _IO_FILE
{
int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
/* The following pointers correspond to the C++ streambuf protocol. */
char *_IO_read_ptr; /* Current read pointer 读指针 */
char *_IO_read_end; /* End of get area. */
char *_IO_read_base; /* Start of putback+get area. */
char *_IO_write_base; /* Start of put area. */
char *_IO_write_ptr; /* Current put pointer. 写指针*/
char *_IO_write_end; /* End of put area. */
char *_IO_buf_base; /* Start of reserve area. 缓冲区起始的位置*/
char *_IO_buf_end; /* End of reserve area. 缓冲区结束的位置*/
/* The following fields are used to support backing up and undo. */
char *_IO_save_base; /* Pointer to start of non-current get area. */
char *_IO_backup_base; /* Pointer to first valid character of backup
area */
char *_IO_save_end; /* Pointer to end of non-current get area. */
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno; /*文件描述符*/
int _flags2;
__off_t _old_offset; /* This used to be _offset but it's too small. */
/* 1+column number of pbase(); 0 is unknown. */
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
_IO_lock_t *_lock;
#ifdef _IO_USE_OLD_IO_FILE
};
要点1:
C 库函数开发的程序是可以跨平台的, 标准 C 库不属于操作系统 ,跨平台方式 是在不同的
平台上调用了不同的平台 api
java 也是 跨平台的 ,在不同的平台上写了 不同形式的虚拟机 java 实在虚拟机上运行的。这
也是跨平台的一种方式。
跨平台就是跨操作系统, QT 也是跨平台的
标准 C IO linux 系统 IO
C 库开发效率比较高,因为函数带了缓冲区。什么时候使用系统 IO 函数呢
C 库函数 调用 linux 系统 IO
要点2:
查看 C 库函数说明文档
man 3 fopen
直接搜索返回值
/return
查看 linux 系统调用函数说明文档
man 2 open
C 库函数的特点:
1 、文件描述符指向一个打开的文件
2 、文件的读写指针,读取数据和写数据的
3 IO 缓冲区, C 库函数都带有内存缓冲区
带有缓冲区的优势:自带缓冲区,缓冲去在内存,当写满的时候,加载到磁盘里面。 降低
写磁盘的次数。写满的时候,只调用一次 系统 IO 函数就可以直接写入磁盘。
先放入缓冲区内存,再放入磁盘。 fopen 就会读一次磁盘, fwrite 就会写一次磁盘
系统的 IO 函数会返回一个文件描述符
虚拟地址空间
进程是分配资源的基本单位,有 CPU 资源、内存资源和 IO 资源。
进程阻塞是等待 IO 资源,或者其他和程序共享的资源。
PCB 进程控制块位于内核区。
程序 磁盘 上的代码,是在磁盘上
进程 实在内存中正在运行的实体,在 内存
应用程序启动后 就会有一个 进程 ,对应 一个虚拟地址空间
虚拟地址空间有多大,是由 CPU 决定的 32 为计算机虚拟地址空间 2 32 次方, 4G
64 为计算机地址空间      2 的 48 次方
CPU 会自动将虚拟地址映射到物理地址, MMU 内存控制单元,负责虚拟地址和物理地址的
转换
内核就是一段程序代码,里面 PCB 就是一个结构体,文件描述符数组默认大小是 1024.
文件描述符在进程的内核区,调用 linux 系统 API 直接返回文件描述符。

📕作者简介:热编程的贝贝,致力于C/C++、Java、Python等多编程语言,热爱跑步健身,喜爱音乐的一位博主。
📗本文收录于贝贝的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏深度学习、目标检测系列等,大家有兴趣的可以看一看
📙C++零基础入门系列,Web入门篇系列正在发展中,喜欢Python、C++的朋友们可以关注一下哦!
📗如有需要此项目工程,请评论区留言哦 也可联系作者微信 Qwe1398276934,速度更快

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给作者的意见,欢迎评论区留言。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechMasterPlus

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值