i/o接口一

一、系统调用和库函数的区别
系统调用是从用户空间进入到内核的一个过程,操作系统的类型不同,系统调用的接口也不同,效率低,只要系统发生调用,就调用一个内核。
库函数:库函数相当于系统调用+缓冲区实现的,所以移植性很强,几乎在所有的操作系统上都可以使用,库函数的执行效率很高。
二、FILE结构体
只要fopen打开一个文件就会产生一个FILE结构体,用来描述文件打开,操作文件就是通过这个结构体实现。
1.fopen函数是一个标准io
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE *fp;//以只写的方式打开文件,如果文件不存在就创建文件
//“./test.txt”文件的路径和文件的名字 //“w” 权限
fp = fopen(“./test.txt”,“w”);
if(fp == NULL){
printf(“open file error\n”);
return -1;
}
printf(“open file success\n”);
return 0;
}
2,fclose(fp);关闭文件,一般打开文件后在函数的末尾需要调用这个函数关闭文件
3fgetc(文件结构体) 从文件中读取一个字符 fputc(int c(被写的字符),FILE *sterm(FILE指针))//从文件写入一个字符
3.fgets/fputs
fgets(char *s,int size,FILE *stream) 从文件中读取size-1个大小的字符串到s中
fputs(const char *s ,FILE *stream) 将字符串s写到文件中
4.fprintf/sprintf/snprintf
int t=300;
fprintf(fp1,“data = %d\n”,t); 将data=300写到fp1中(文件末尾)
sprintf(buf,“字符串”) 将字符串写到buf中
snprintf(buf,sizeof(buf),“字符串”);将字符串写到buf中,大小为sizeof(buf)个字节
5.fread/fwrite/feof/ferror函数
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从stream中读取数据到ptr中,读取nmemb个size
参数:
@ptr: 存放读取到的数据
@size:每一项的大小
@nmemb:项的个数
@stream:文件指针
返回值:成功返回读取到的项目的个数,失败返回值小于项目的个数是失败了
失败需要调用feof或ferror判断是什么原因出错的。
int feof(FILE *stream);
功能:如果到文件的结尾返回真

int ferror(FILE *stream);
功能:如果读取出错这个函数返回真

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:从ptr中向stream中写,写nmemb个size
参数:
@ptr:写的首地址
@size:每一项的大小
@nmemb:项的个数
@stream:文件指针
返回值:成功返回写的项目的个数,失败返回值小于项目的个数是失败了
6 rewind/fseek/ftell
int fseek(FILE *stream, long offset, int whence);
功能:设置文件中光标的位置
参数:
@steam:文件指针
@offset:偏移
>0 向后偏移
=0 不偏移
<0 向前偏移
@whence:位置
SEEK_SET, 开头
SEEK_CUR, 当前位置
SEEK_END 结尾
返回值:成功返回0,失败-1置位错误码
eg:
fseek(fp,0,SEEK_SET) //将光标定位在开头
fseek(fp,10,SEEK_SET) //从文件的开头向后偏移10个字符的位置
fseek(fp,20,SEEK_CUR) //从当前位置向后偏移20个字符的位置
fseek(fp,-20,SEEK_CUR) //从当前位置向前偏移20个字符的位置
fseek(fp,-10,SEEK_END) //从结尾向前偏移10个字符的位置

void rewind(FILE *stream);
功能:定位光标的位置到文件的开头

long ftell(FILE *stream);
功能:返回光标的位置
参数:
@steam:文件指针
返回值:成功返回光标的位置,失败-1置位错误码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值