📕作者简介:热编程的贝贝,致力于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,速度更快!
如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给作者的意见,欢迎评论区留言。

1312

被折叠的 条评论
为什么被折叠?



