Linux 文件1.7 — 标准C语言库对文件的操作在<stdio.h>中,fread; fopen; fgets; 等,

int fclose(FILE *fp);
文件一旦使用完毕,应该用 fclose() 函数把文件关闭,以释放相关资源,避免数据丢失。fclose() 的用法为:
fp 为文件指针;
文件正常关闭时,fclose() 的返回值为0,如果返回非零值则表示有错误发生。
FILE * fopen (char * filename, char * mode);
#include<stdio.h>
filename 文件名称
mode 打开模式:
有:
r
只读方式打开一个文本文件
rb
只读方式打开一一个二 二进制文件
W
只写方式打开一一个文本文件
wb
只写方式打开一个二进制文件
a
追加方式打开一个文本文件
ab
追加方式打开一个二进制文件
r+
可读可写方式打开一个文本文件
rb+
可读可写方式打开- -个二 进制文件
w+
可读可写方式创建一个文本文件
wb+
可读可写方式生成一个二进制文件
a+
可读可写追加方式打开一个文本文件
ab+
可读可写方式追加一一个二进制文件

在这里插入图片描述
调用 fopen() 函数时必须指明读写权限,但是可以不指明读写方式(此时默认为"t")。

读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方式放在读写权限的开头)。例如:

	将读写方式放在读写权限的末尾:"rb""wt""ab""r+b""w+t""a+t"
	
	将读写方式放在读写权限的中间:"rb+""wt+""ab+"

整体来说,文件打开方式由 r、w、a、t、b、+ 六个字符拼成,各字符的含义是:

	r(read):读
	w(write):写
	a(append):追加
	t(text):文本文件
	b(banary):二进制文件
	+:读和写

关于 fread(); fwrite(); fseek();fgets();fgetc();feof();(ferror没写)

//  FILE * fp; 必须命名 fp 为指向 FILE 的指针
	FILE * fp = fopen("./clc.txt","w+");     // 注意一下,这里是指针,"w+" 必须加 " " 
		if(fp == NULL){
		puts("fail to open file");    exit(-1);   // 关于 exit() 其声明为:void exit(int status); 作用就是退出当前程序; 
												 //  status 指的是 程序退出时的状态码,一般 0 表示正常退出,其他表示非正常退出,一般都使用 -1;
	}

/	size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。
	ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
	size -- 这是要读取的每个元素的大小,以字节为单位。
	nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。
	返回值:
	返回成功读取的对象个数,若出现错误或到达文件末尾,若size或nmemb 为零,则fread返回零且不进行其他动作。
	fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。
	使用时,必须要注意:
	char c[] = "This is runoob";
	fread(buffer, strlen(c)+1, 1, fp);    这里是 strlen(C) + 1 要多出一个字节以存放 '\0'
	另外,fread()fwrite() 其实是一样的,都是从光标处开始写入/读取的,所以,要考虑清楚, fseek() 的使用
	 
/	 int fseek(FILE *stream, long int offset, int whence);
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	offset -- 这是相对 whence 的偏移量,以字节为单位。
	whence -- 这是表示开始添加偏移 offset 的位置
		关于 whence:
		SEEK_SET	文件的开头
		SEEK_CUR	文件指针的当前位置
		SEEK_END	文件的末尾
		你看,其实和 lseek(); 是一样的

/	size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
	ptr -- 这是指向要被写入的元素数组的指针。
    size -- 这是要被写入的每个元素的大小,以字节为单位。
    nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
    stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流(其实就是文件夹的地址)
    返回值:
		如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
		注意哈,正常情况下,这里的 size_t 要与 nmemb 相同,	
	eg:
	char str[] = "This is runoob.com";
	int n_write = fwrite(str, sizeof(str) , 1, fp );
	这里 n_write = 1;
	
	int n_write = fwrite(str,sizeof(char),strlen(str),fp);
	这里 n_write = strlen(str);

/	 int feof(FILE *stream);
	 返回值:
	 	当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。 // 其实就是说,当没有到达文件尾部的时候,返回值为 0;当到达文件末尾时,返回 非0
	while(1)
   {
      c = fgetc(fp);           // fgetc 与 fgets 唯一的区别是 c 只读一个字符,s 读一行字符
      if( feof(fp) )       // if 语句,不为0 时,后面语句执行,为 0 时,后面语句不执行
      { 
          break ;
      }
      printf("%c", c);
   }
	
/	 char * fgets(char *str, int n, FILE *stream);
	 从 stream 中读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止;
	 返回值是:如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,也返回一个空指针。
	 所以是每次只能取出一行,且当全部读取后,返回值为 NULL 
	 使用时:
	  while( fgets(str, N, fp) != NULL ) {
        printf("%s", str);
    }

    fclose(fp);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值