一:知识点
1.文件操作的系统调用,他们的实现在内核(操作系统)中
①open() ②read() ③write() ④close()
2.C语言中的fopen()是一个库函数,他调用的是open(底层的系统调用)fopen是靠open实现的,无论上层分了多少与文件有关的函数,从底层来讲就只有4个与文件有关的函数(open read write close)
3.Linux不分文本文件和二进制文件,在Linux上没有什么区别,只有windows才分
4.最底层是计算机硬件,硬件之上是操作系统(内核),用户和内核z之间有系统调用,通过系统调用可以进入内核,系统调用上面是库函数

5.printf函数要往屏幕(硬件)上打印信息,要通过内核去打印,所以需要通过系统调用进入内核空间执行内核代码来访问硬件,而我们自己可以实现的库函数(比如strlen),不需要其他的底层的支持,也就不需要通过系统调用进入内核
像strlen这种我们自己可以实现的库函数就不需要调用系统调用,库函数有可能调用系统调用,也有可能不调用系统调用,系统调用是进入内核的一个桥梁,系统调用比库函数更底层一点
6.通过系统调用获取进程的id号,要访问内核中的一些数据结构,访问底层的硬件,就必须要通过系统调用来完成
7.什么是文件:文件主要有两大操作(往里面写数据还有从里面读数据),文件就是存放数据的仓库,如图片,电影,歌曲都是文件,里面都保存了数据
8.内存的特点就是断电不保护,一断电,保存的数据就消失了,硬盘,断电保护,可以长久的保存数据
9.硬盘有固态硬盘(速度快),机械硬盘(速度慢,容易坏)
10.文件包含在#include <fcntl.h>头文件中
11.读文件通过返回值是否为0判断是否读完
12.操作系统:管理计算机上的软硬件资源,为用户提供一个交互的接口。
(1) 串行处理 (2) 批处理 (3) 多道程序设计 (4) 分时系统
13.对文件的操作就分为三个阶段①打开文件②读或者写③关闭文件
14.打开文件open,返回的是文件描述符
15.ssize_t:有符号整数 size_t:无符号整数
16 int open(const char* pathname,int flags); 路径名称+方式(读还是写)+权限
例如:fd=open(“file.txt”,O_WRONLY|O_CREAT,0600);意思说创建(因为有O_CREAT)了一个名字叫file.txt的文件,方式是只写,权限是仅自己
int open(const char* pathname,int flags,mode_t mode);
例如:fd=open(“file.txt”,O_WRONLY,0600);意思是说打开file.txt文件,方式是只写,权限仅自己
只读:O_RDONLY 只写:O_WRONLY 可读可写O_RDWR 创建O_CREAT
17.读取文件read
ssize_t read(int fd,void *buf,size_t count);
例如:read(fd,buf,5);意思是说读取fd(文件描述符)的内容,读到buf中,读5个数据
18.写文件write
ssize_t write(int fd,const void *buf,size_t count);
例如:write(fd,“Hello”,5);意思是说往fd中写,写的内容是buf里面的内容,写5个数据
19.关闭文件close
int close(int fd);
close(fd);意思是说关闭fd文件
二:代码演示:
1.写文件:
①fd = open(“file.txt” ,O_WRONLY|O_CREAT , 0600);
创建文件,名字叫file.txt,方式是只写,权限是自己(6),其他人(0),同组人(0)
#include <stdio.h>
#include <stdlib.h>
#include