没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式底层的开发步骤,LED驱动,key驱动,I2C驱动
资源推荐
资源详情
资源评论
1
IO:通过一系列函数,实现对文件的读写操作
文件:标准 IO:文件 IO
系统调用和库函数
库函数(标准 IO):是由 c 语言的开发者编译的,供人们进行调用,实现一定的功能
系统调用(文件 IO):是内核开发时提供的,供用户访问内核功能时候使用,起到了保护
内核的作用
回车 刷新缓冲区
缓冲区:在内存中开辟的一块区域,用来缓冲数据。减少对磁盘的访问,或减少频繁的用
户态到内核态的切换
全缓冲:当对文件操作的时候一般是全缓冲 需要对文件的一个刷新处理 ()
刷新条件:1:缓冲区满了
2:用 fflush 刷新缓冲区
3:进程正常结束,或关闭这个流
行缓冲:当对终端操作的时候一般是行缓冲
刷新条件:1:缓冲区满了 行缓冲 1024 字节)
2:用 fflush 刷新缓冲区
3:进程正常结束, 或关闭这个流
4:遇到换行‘’ 刷新缓冲区
无缓冲:(文件 IO)
实时写入东西
EOF 在宏定义中是 -1
STDIN_FILENO 0 stdin 标准输入
STDOUT_FILENO 0 stdout 标准输出
返回类型 file *
FILE *fopen(const char *path ,const char *mode)
{ 所打开文件的路径
}
mode(权限 0)
r 可读权限 ,
r++可读可写权限,如果文件不存在错误
w:打开只写文件,若文件存在则长度清为 0;
w+++ 可读可写权限,如果我文件不存在则简历新的文件,如果文件不存在,则源文件被
擦除
功能:打开一个文件供人们进行调用,实现一定的功能
参数: path :字符串类型,文件的路径
2
mode:字符创类型,文件的打开的权限;
返回值:返回这个文件的流指针
错误返回 NULL
FILE *fp;
if()
fclose(fd) 关闭一个流
有一个打开最好有一个关闭
fclose(fd) 如果关闭一个已经关闭的流,则会产生错误 流的关闭只能关闭一次
fclose(fd)
freopen() 重定向
功能: 将一个现有的流进行重新定向
参数 :前两个参数同 fopen()
第三个参数
int getchar(void)
功能:从终端获取一个字符
参数:没有参数
返回值:返回获取到的字符
int putchar(int c)
功能:向终端打印一个字符
int getc(FILE *stream)
功能:从一个流中获取一个字符
参数 :一个 FILE *
返回值:返回相应的字符
int putc(int c,FILE *stream);
功能:向一个流中,写入一个字符
参数:第一个是一个字符变量
int main( int argc, const char *argv[])
命令行传的个数 传的值数据
判断文件是结尾还是出错
feof(fp)
ferror(fp)
fgets() 当遇到 size-1 个字符时候返回,遇到‘\n’也返回
3
使用 fgets 读到的都是字符串,末尾自动添加‘\0’
当出错或读到文件结尾的时候返回 NULL
从终端读入的时候 如果读入大于 size-1 个字符,那么不读入回车
如果少于 size-1 ,那么回车将也被读入
FILE 指针:每个被使用的文件都在内存中开辟了一个区域,用来存放文件的有关的信息,
这些信息是保存在一个结构体变量中,该结构体类型是由系统定义的取名为 FILE
流定义:所有的 I/O 操作仅是简单的从程序移进或者移出,这种字节流就称为流
EOF 文件结束符(end of file)
【1】文件 IO
文件描述符:是一个非负的整数,用于文件 IO 打开一个文件的描述
int open(const char *pathname, int flags, mode_t mode);
功能:文件 IO 的方式打开一个文件
pathname:文件的路径
flags:文件的打开方式
mode:文件的打开权限 (实际文件权限为 mode & (~ umask) );
返回值:返回文件描述符
ssize_t read(int fd, void *buf, size_t count)
功能:将一个文件中,大小为 count 字节的内容读到 buf 中
参数 fd--指定的文件描述符
buf---一个临时的存储区域,用来存储读到的内容
count---每次读取的字节数;
返回值:正确,返回读取的字节数
读到文件末尾返回 0
出错,返回-1
ssize_t write(int fd, const void *buf, size_t count);
功能:向一个文件中写入大小为 count 字节的内容,该内容在 buf 中
参数 fd--指定的文件描述符
4
buf---一个临时的存储区域,用来存储要写到文件中的内容
count---每次写入的字节数;
返回值:正确,返回写入的字节数
写完返回 0;
出错,返回-1
off_t lseek(int fd, off_t offset, int whence);
功能:文件 IO 中控制文件的偏移量
参数:fd:文件描述符
offset:偏移量,可正可负,正数表示向后移动,负数表示向前移动
whence:标定文件偏移量位置
返回值:成功返回文件偏移量位置
失败返回-1
注意:lseek 只对普通文件和设备文件有效,对已一些 socket,管道,fifo 等文件是无效的
【1】静态库,动态库的制作
库:本质就是可执行的二进制代码,可以被操作系统载入到内存当中执行
静态库:静态库在程序编译的时候会被加载到目标代码中,程序在执行的时候就不再需要
静态库了,体积比较大但是在其他平台上执行的时候就不再需要静态库的支持了。对库的
依赖性小
动态库(共享库):动态库在程序编译时不会被加载到目标代码,而是在程序运行时候才
被载入,因此在程序运行的时候仍然需要动态库的支持,代码体较小。但是缺少摸个库的
时候,程序将无法运行。
/**************************************************************/
【1】如何生成 ctags 文件
1-- 进入目录
cd /usr/include/
2-- 生成 ctags 文件
sudo ctags -R
3-- 查找一些定义
vim -t "内容"
4-- 代码追踪
ctrl + ]
5
5-- 返回上一级
ctrl + t
【2】标准 IO(高级磁盘 IO)
系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,以达到减少系统调用的
次数,
从而提高对文件操作的效率。
【3】FILE
FILE 指针:每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息,
这些信息是保
存在一个结构体类型的变量中,该结构体类型是由系统定义的,取名为 FILE
stdin 标准输入流指针
stdout 标准输出流指针
stderr 标准出错流指针
【4】FILE *fopen(const char *path, const char *mode);
功能:打开一个文件
参数:path 路径名
mode r 只读方式打开,文件不存在报错
r+ 可读可写方式打开,文件不存在报错
w 只写方式打开,文件不存在创建,存在清零
w+ 读写方式打开,文件不存在创建,存在清零
a 追加方式(写),文件不存在创建,存在就追加在文件尾端
a+ 读写方式, 文件不存在创建,存在追加在结尾。
返回值:文件流指针,出错 NULL
【5】缓存的分类
1-- 全缓存
流与文件相关联,叫做全缓存。
全缓存刷新方法:
1)缓存区满
2)程序正常结束
3)fflush 强制刷新
全缓存大小:
4K
2-- 行缓存
流与终端相关联的,叫做行缓存,输入、输出。
剩余63页未读,继续阅读
资源评论
qq_21557827
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功