文件调用函数

本文详细介绍了C语言中的文件操作库函数,如fopen、fread、fwrite等,以及Linux系统调用函数,如open、read、write等。讨论了打开、读取、写入、定位和关闭文件的过程,同时提到了内核态和用户态的概念以及用户态如何切换到内核态执行系统调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

内核态:

在内核空间上执行,有操作系统最高权限

用户态:

在用户空间上执行,有操作系统的最低权限

系统调用函数:在用户态调用,内核态实现

用户态切换内核态

  1. 触发 0x80 中断,每个中断号都有中断处理程序(内核中)
  2. 保存程序上下文
  3. 将系统调用号保存到 eax 寄存器

      进入内核态之后,内核开始执行中断处理程序,在系统调用表中查找系统调用号对应的内核函数并调用,执行完成之后又将返回值通过 eax 寄存器传递回用户空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值