笔记系列
嵌入式系统方向学习笔记6
嵌入式系统方向学习笔记7
嵌入式系统方向学习笔记8
嵌入式系统方向学习笔记9
文章目录
文件与函数
一、文件
1、Linux文件
1、Linux文件:
文件本身包含的数据(打开文件可以看到数据信息)
2、文件描述符:本质实时一个正整数 open函数 0=OPEN-MAX
man:查命令
man2:系统调用
man3:查库函数
2、文件属性
文件属性:ls -l (元数据:文件的访问权限,文件的大小,创建日期等)
目录也是文件之一(当创建一个新的目录的时候,系统自动创建两个新的文件项 . 和 . .)
. :当前目录
. . :上一级目录
cache:应用程序的缓存文件
lib:应用程序的信息和数据
local:usr/local中程序的信息
lock:锁文件
log:日志文件
opt:/opt中程序信息和数据
run:正在执行的信息,PID文件
tmp:临时文件
media:文件系统的挂载点
3、文件类型
- 普通文件类型
Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-] - 目录文件
就是目录, 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx] - 块设备文件
块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b] - 字符设备
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c] - 套接字文件
这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型 - 管道文件
FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p] - 链接文件
类似Windows下面的快捷方式
二、操作系统
内核:操作系统对于软硬件和系统资源分配的最重要的核心部分
系统调用:操作系统提供给用户的一组“特殊”的接口,用户可以通过这组接口来获取操作系统内核提供的服务
用户编程接口:系统调用不是直接和程序员进行交互,它仅仅提供一个通过软中断机制向内核提交请求。来获取内核服务的接口,在实际使用中程序员调用的通常是用户编程接口(API)
ps:系统命令比api更高级
三、函数
1.相关知识
File*
结构体
缓冲区:程序中每个文件都可以使用
磁盘文件->缓冲区->内核(CPU)
stdio.h:c的标准输入输出库:l/O
行缓冲:stdout终端上进行输出的时候,输出的规则为每当出现换行符的时候进行依次刷新缓存,然后进行操作(printf输出的时候,时看到换行符才进行输出的)
2.creat函数
creat:创建文件函数
Int creat(文件描述符,创建模式)
创建模式
S_IRUSR : 可读
S_IWUSR : 可写
S_IXUSR :可执行
S_IRWXU:可读可写可执行
代码如下:
int fd = creat("./test",S_IRWXU);
3.open函数
O_RDONLY:以只读的方式打开文件
O-WRONLY:以只写的方式打开文件
O_RDWR:以可写可读的方式打开
O_CREAT:如果文件存在就打开,不存在就创建
O_APPEND:写文件的时候追加文件末尾
出错返回-1
4.write函数
write函数:向文件写入数据
write(文件描述符,写入的数据指针,写入的数据内存大小)
5.lseek函数
lseek:用来调整光标的位置
lseek(文件描述符,光标移动位置数,光标移动的形式)
SEEK_SET:将光标移动到文件开头再增加相应的offset位置
SEEK_CUR:将光标移动到文件的当前位置再往后加offset的位置
SEEK_END:将光标移动到末尾再增加offset的位置
lseek函数返回值:从文件开头到光标位置有多少个字符
6.fopen函数
fopen():
r:只读
w:如果文件不存在,创建一个新的,如果存在,清空文件内容
a:追加:不存在,创建一个新的,存在就在文件末尾进行追加
r+:可读可写
w+:w + ( r+ )
a+:a +( r + )
7.fread函数
ptr:字符串指针
size:读取每个字符的大小
nmemb:读多少个
stream:文件描述符指针
四.输入输出家族
1.读字符家族
读字符家族:
getc:从文件里读取一个字符getc(fp)返回值:当督导文件末尾的时候返回EOF
fgetc:函数调用
getchar:将字符从unsigned char转换成int进行返回,带走缓冲区
2.写字符家族
fputc:将某一字符写入文件流
Int fputc(int c,FILE *steram)
putc:宏定义
putchar:
3.printf家族和scanf家族
1.printf家族
printf:
fprintf: int fprintf(FILE *stream,const char *format,…)
Sprintf():
2.scanf家族
fscanf:从文件流里写读字符串
Int fscanf(FILE *stream,const char *format,…)
sscanf():从字符串里读取变量
作业
1、封装printf
2、解决错误sscanf.c
3、照片