导图社区 进程IO和网络
这是一篇关于进程IO和网络的思维导图,包含了行缓冲:对于终端操作采用的缓冲区,全缓冲:对于文件操作采用的缓冲区,无缓中:对于终端操作出错采用的缓冲区
提示: 本内容由社区用户上传并分享。平台不对内容的真实性、合法性、知识产权归属及是否侵害第三方权利进行事前审核或保证。本内容可能包含受版权保护的图片、字体或其他第三方素材,使用前请自行确认授权范围。
这是一篇关于进程IO和网络(2)的思维导图,包括:目录操作、静态库和动态库进程、线程、线程间同步与互斥机制。
这是一篇关于Linux与C的思维导图,必备Linux命令和C语言基础知识总结,包括环境安装、文件和目录相关命令、vi编辑器的使用/程序的编译和调试/数据的表示等内容。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
产品立项报告
个人日常活动安排思维导图
产品经理如何做好项目管理
西游记主要人物性格分析
17种头脑风暴法
经验分享:产品经理必懂的产品思维
产品诞生过程
产品周期图
进程IO和网络
IO的分类
标准IO:系统调用,使用应用层的函数对linux内核进行操作,从而控制硬件设备
文件IO:库函数,本质还是系统调用,不过在此之间多了一个缓冲区,用于减少系统调用的次数
标准IO
概念
标准I/O库由ANSI C标准说明 标准I/O库处理很多细节,如缓存分配、以优化长度执行I/O等,这样使用户不必关心如何选择合适的块长度 标准I/O在系统调用函数基础上构造的,它便于用户使用 标准I/O库及其头文件stdio.h为底层I/O系统调用提供了一个通用的接口。
缓冲区
分类
(1)行缓冲:对于终端操作采用的缓冲区
缓存区大小: 1024字节(1K) 刷新缓存 :程序正常结束、缓存区满、 ’\n’ 、使用fflush函数 关于终端默认的3个流指针 stdin :标准输入 stdout :标准输出 stderr :标准出错
(2)全缓冲:对于文件操作采用的缓冲区
缓存区大小:4096字节(4K) 刷新缓存 :程序正常结束、缓存区满、使用fflush函数
(3)无缓冲:对于终端操作出错采用的缓冲区
在读写文件的时候系统调用io(read,write)对文件进行读写数据--即文件IO 标准出错(stderr)
文件指针
一般都需要一个FILE类型的指针变量保存文件信息,所以对这个指针变量的操作就是对文件的操作,所以这个结构体指针变量称之为文件指针,也称之为流指针
流(stream) 定义:所有的I/O操作仅是简单的从程序移进或者移出,这种字节流,就称为流。 分类:文本流/二进制流。
FILE结构体: typedef struct _IO_FILE FILE;
ctags工具的使用
第一步:在指定目录下创建索引文件;第二步:将索引文件设置全局;第三步:追代码
相关函数
1.fopen();2.fclose();3.fprintf();4.fputc();5.fgetc();6.fputs();7.fgets()
fread()
功能:读取文件内容 参数: ptr:保存读取的内容,因为类型是万能指针,所以可以读取任意类型的数据 size: 每一个块的字节数 nmemb:一共有多少块 stream:文件指针 返回值:成功:读取的块数(对象数)失败:0
fwrite()
功能:向文件写内容 参数: ptr:要写的数据 size: 每一个块的字节数 nmemb:一共有多少块 stream:文件指针 返回值:成功:写入文件的块数(对象数)失败:0
fseek()/rewind()/ftell()
功能:设置文件指针的位置 参数: stream:文件指针 offset:偏移量,可正可负 whence:相对位置 SEEK_SET 文件起始位置 SEEK_CUR 文件当前位置 SEEK_END 文件末尾的下一个位置 返回值:成功:0失败:‐1
文件IO
文件IO是通过文件描述符来标识和操作文件的;文件描述符是一个非负整数,当通过open函数打开或者创建一个文件时,就会返回一个文件描述符,文件描述符的值会随着open函数的创建以此递增
当一个程序运行时,同样会自动分配三个文件描述符,这三个文件描述符也是在文件IO中对终端进行操作的:0 标准输入;1 标准输出;2 标准出错输出
文件IO相关函数
open()
功能:打开或者创建一个文件 参数: pathname:文件名,可以添加路径,如果不添加默认是当前目录;flags:标志位;O_RDONLY 只读;O_WRONLY 只写;O_RDWR 读写;O_APPEND 文件存在则追加;O_TRUNC 文件存在则清空;O_CREAT 如果文件不存在则创建;O_EXCL 与O_CREAT一起使用,如果文件存在则报错;mode:指定创建文件的权限,一般使用八进制表示,0664;只有当flags有O_CREAT权限时才会指定当前参数 返回值:成功:文件描述符,失败:‐1
close()
功能:关闭文件描述符 参数: fd:文件描述符 返回值:成功:0 失败:‐1
read()
功能:从文件中读取数据 参数:fd:文件描述符;buf:保存读取的内容;count:要读取文件内容的字节数 返回值:成功:实际读取的字节数;失败:‐1 如果文件内容读取完毕,返回0
write()
功能:向文件写数据 参数:fd:文件描述符;buf:要写入的内容;count:要写入的字节数 返回值:成功:实际写入的字节数;失败:‐1
lseek()
功能:定位文件位置 参数:fd:文件描述符;offset:偏移量;whence:相对位置;SEEK_SET 文件起始位置;SEEK_CUR 文件当前位置;SEEK_END 文件末尾位置 返回值: 成功:当前文件的位置;失败:‐1
对标准IO和文件IO
不可移植,属于系统调用 例如:read、write、open
可移植,属于库函数,linux操作系统中标准IO的本质还是系统调用标准IO相比文件IO,多了一个缓冲区,减少系统调用的次数来提高效率 例如:printf、scanf、putc、getc、puts、gets