IO及网络进程
一、io地位
1、地位
处于应用层和过渡层,属于应用层。
2、分类
文件管理 进程管理 网络管理 内存管理 设备管理
3、API(应用程序接口)
学习接口函数 三要素: 功能 ,参数, 返回值;
char * strcpy(char* dest ,const char *src)
4、相关知识
io:
文件 io
标准io
目录io
进程 进程间通信
网络
二、标准IO
方向: 输出 输入方向文件
#include<stdio.h> //std 标准io printf scanf getchar gets puts putchar
1、io:
input output linux 下读写文件的方式
2、流:
stream 标准io 的操作对象是描述文件信息的结构体
基本操作:
打开- 读写-关闭
二八法则
3、文件的打开open
4、错误提示
perror函数
strerror函数
5、按行读写
5、1从文件中读取一行fgets函数
5、2向文件中一行写入fputs
6、关闭文件
7、按照字节读写
char 可以理解为特殊的整数,返回值是读取出的字符对应的ascii值
7.1向文件写入一个字符fputc
7.2从文件中读取一个字符fgetc、
循环显示文件内容
8.标准文件
1、程序运行时,系统自动打开三个流。
2、标准输入 从标准输入读取数据 默认是键盘 stdin --FILE*stdin
3、标准输出 向标准输出设备输出 默认是显示器 stdout --FILE*stdout
4、标准错误输出 向标准错误输出设备输出 默认是显示器 stderr --FILE*stderr
1、文本文件:用记事本,打开之后,显示的是可见的字符,里面保存的是ascii码。
2、二进制文件: 可执行文件,如果用记事本打开,是乱码。
3、前边的函数主要是操作文本文件, 字符串的操作 这一对是操作什么都可以 ,可以操作二进制文件,是指定块大小。
9、按照指定大小读写
9.1按照指定大小读fread
9.2按照指定大小写fwrite
循环拷贝文件
10、将地址空间上数据清零
fread 读取数据 会有冗余数据
11、memset函数
12、feof
13.定位文件位置指针
14.定位文件位置指针
15.返回当前文件位置指针的位置
三、文件io
流程:打开--读写--关闭
open --read/write--close
1、打开文件
2、flag 之O_CREAT
如果文件不存在则创建并打开, 如果文件存在,则打开并不能清空
3、文件描述符的分配规则
当前尚未分配的最小的非负整数
4、标准流
标准输入 stdin --键盘0
标准输出stdout--屏幕1
标准错误输出stderr--屏幕 2
5、文件的权限
6、flag之O_EXCL
测试文件是否存在,如果O_CREAT时 问价已存在,则在open返回错误信息
7、flag之O_TRUNC
清空文件内容
8、读取
9、flag之O_RDONLY只读方式
10、flag之O_WRONLY
只写方式打开文件
11、写入
12、关闭文件
13.flag之O_APPEND
以追加的方式打开文件 ,读写会从文件末尾开始
14、文件位置指针定位
O_RDWR: 以读写方式打开文件
四、文件IO和标准IO区别
库(lib)
现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都是从0开始,因此库的存在意义非同寻常
1、理解
本质上说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行
由于windows和linux本质不同,因此二者的库的二进制是不兼容的
1)可以执行的二进制代码,可以被os载入内存执行(os是操作系统的缩写)
2)库函数 为了实现某个功能而封装起来的API集合//api 应用程序接口 scanf print
3)提供统一的编程接口,更加便于应用程序的移植
2、库的划分
静态库
动态库
一般情况下,库文件的开发者会同时提供动态库和静态库两个版本,它们都有各自的优缺点。
静态库在链接阶段,会被直接链接进最终的二进制文件中,因此最终生成的二进制文件体积会比较大,但是可以不再依赖于库文件。
动态库并不是被链接到文件中的,只是保存了依赖关系,因此最终生成的二进制文件体积较小,但是在运行阶段需要加载动态库
2.1静态库
命名规则:静态库的名字一般为libxxxx.a 其中xxxxx是该库的名称lib开头后缀名为.a
2.2动态库--共享库
命名规则:动态库的名字一般为libxxxx.so.major.minor,lib开头 后缀名为.so xxxx是该库的名
称,major是主版本号, minor是副版本号
3、动态库和静态库的区别
静态:a.out=应用程序+静态
动态:a.out=应用程序
