linux中fopen,fclose ,fseek,fread,fwrite,ftell功能和使用

1. fopen()

用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数.

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);

参数:
path:为欲打开文件的文件路径及文件名
mode:为文件打开方式
文件打开方式选项有:

	r:只读方式打开,文件必须存在
	r+:可读写,必须存在
	rb+:打开二进制文件,可以读写
	rt+:打开文本文件,可读写
	w:只写,文件存在则文件长度清0,文件不存在则建立该文件
	w+:可读写,文件存在则文件长度清0,文件不存在则建立该文件
	a:附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保
	a+:附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留
	wb:打开二进制文件,只写
	wb+:打开或建立二进制文件,可读写
	wt+:打开或建立文本文件,可读写
	at+:打开文本文件,可读写,写的数据加在文本末尾
	ab+:打开二进制文件,可读写,写的数据加在文件末尾

返回值
注意:若果文件打开失败则返回NULL,所以在打开文件后最好进行判断是否成功打开文件。

2.fread()

用于从文件中读入一定大小数据到指定的地址中。

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数:
*ptr为接收数据的指针。
size为每个数据类型的大小(字节)
nmemb为元素个数,即要读取的数据大小为size的元素个素
stream为提供数据的文件指针,该指针指向文件内部数据
返回值:成功读取的元素个数

3.fwrite()

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

参数:
ptr:是一个指针,对fwrite来说,是要输出数据的地址。
size:每个数据类型的大小(字节)
count:要进行写入数据的个数;
stream:目标文件指针。
返回值:写入数据的个数。

4.fseek()

用于重新定位文件流指针。

int fseek(FILE *stream, long offset, int whence);

参数:

stream:要操作的文件流指针
offset:相对于whence的偏移量,偏移量可以为负数,但注意不要越界。
whence:为相对起始位置有:
	SEEK_SET 文件开始,
	SEEK_CUR 文件当前前位置
	SEEK_END 文件结尾

返回值:成功,返回0,失败 -1。

5.ftell()

返回文件指针相对于其实文章的偏移量(字节)。

long ftell(FILE *stream);

参数:
*stream:文件流指针

用法:利用函数 ftell() 也能方便地知道一个文件的长度,先将文件的当前位置移到文件的末尾用fseek函数,然后调用函数ftell()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数

6.rewind()

让文件的位置回到文件的起始位置;相当于调用fseek(fd,0,SEEK_SET);

void rewind(FILE *stream);

7.fclose()

用于功能是关闭一个文件,会释放文件指针和有关的缓冲区。

int fclose(FILE *fp);

参数fp:文件流指针
返回值:如果文件成功关闭,fclose ()返回 0,否则返回-1;

最后一个小作业回顾知识点:
要求:
在这里插入图片描述

  #include <stdio.h>    
  #include <stdlib.h>    
  #include <string.h>    
      
  int main ()    
  {    
    FILE *fd = fopen("./bite.txt","wb+");    
    if(fd==NULL){    
      perror("fopen error");    
          return -1;    
    }    
      char *str ="linux so easy";    
    int ret0=fwrite(str,strlen(str),1,fd);    //设置块大小为字符串长度,写入的块个数为一,写入成功则返回块个数为1.
    if(ret0==0){                                                                   
      perror("fwrite error");    
      return -1;    
    }    
      
    fseek(fd,0,SEEK_SET);    //fd回到起始偏移位置,准备读
    char buf[1024]={0};    
    int ret1 = fread(buf,1,1023,fd);    //设置块大小为1,返回读取到的数据个数
    if(ret1==0){    //判断文件是否读取完,fread返回值为0有两种结果分开判断
      if(feof(fd)){    
        printf("已读到文件末尾\n");    
      }    
      if(ferror(fd)){    
        perror("写入出错");    
      }    
    }    
    printf("%s\n",buf);    
    return 0;    
  } 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值