C语言的库函数
fopen fread fwrite fclose fseek fgets fputs fgetc fputc
Linux的系统调用函数
open read write close lseek
打开文件
FILE *fopen(const char *filename,const char *flag);
int open(const char *filename,int flag,int mode);
mode 指新建文件的权限
返回值成功>=0,失败=-1
filag | |
---|---|
O_RDONLY | 以只读方式打开文件 |
O_WRONLY | 以只写方式打开文件 |
O_RDWR | 以读写方式打开文件 |
O_CREAT | 如果指定文件不存在,则创建这个文件 |
O_APPEND | 每次写操作都写入文件的末尾 |
O_TRUNC | 如果文件存在,并且以只写/读写方式打开,则清空文件全部内容 |
读文件
int fread(void *buff,int size,int count,FILE *fp);
int read(int fd,void *buff,int len)
返回值成功返回实际读取的字节长度,失败=-1
len 指一次性最多读取的字节长度,一般都是buff大小
写文件
int fwrite(void *buff,int size,int count,FILE *fp);
int write(int fd,void *buff,int len);
len一般指buff中实际数据长度
成功:实际写入的字节长度,失败=-1
文件位置移动
fseek(FILE *fp,int size,int pos);
lseek(int fd,int size,int pos);
pos | |
---|---|
SEEK_SET | 当前位置为文件的开头,新位置为偏移量的大小 |
SEEK_CUR | 当前位置为文件指针的位置,新位置为当前位置加上偏移量 |
SEEK_END | 当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小 |
关闭文件
fclose(FILFE *fp);
close(int fd);
内核态:
在内核空间上执行,有操作系统最高权限
用户态:
在用户空间上执行,有操作系统的最低权限
系统调用函数:在用户态调用,内核态实现
用户态切换内核态
- 触发 0x80 中断,每个中断号都有中断处理程序(内核中)
- 保存程序上下文
- 将系统调用号保存到 eax 寄存器
进入内核态之后,内核开始执行中断处理程序,在系统调用表中查找系统调用号对应的内核函数并调用,执行完成之后又将返回值通过 eax 寄存器传递回用户空间。