IOS自学第四篇

 

      黑马IOS培训期待与您交流!



  今天复习了C语言中的文件处理。

  常常需要将一些数据输出倒磁盘上,保存起来,以后使用,这就要用的磁盘文件,
操作系统把各种设备都统一作为文件处理(linux),从操作系统的角度看,每一个与主机相连接的输入输出设备都看作是文件,例如:终端键盘是输入文件;显示屏和打印机是输出文件。

文件的概念:
1)文件 是存储在外部介质上数据集合
2)一批数据以文件的形式存放在外部介质上
3)操作系统是以文件位单位,对数据进行管理
4)想找存放在外部介质上的数据,先按文件名找到所指定的文件,然后再从该文件读数据
5)(冯.诺依曼原理计算机的组成部分:输入设备、输出设备、运算器、控制器、存储器。)


“流”是一个传输通道,数据可以从运行环境流入程序中,或者从程序流输出到运行环境
文件的分类:主要分为 ASCII文件 和 二进制文件
ASCII 文件以字符的方式存放,二进制文件是以 字节存放


c语言 采用缓存处理数据文件。
所谓缓存是指系统自动的在内存区位程序中每一个正在使用的文件开辟一个文件缓冲区,每个被使用的文件都在内存中开辟一个行文的文件信息区,用来存放文件的有关信息,这些信息保存在一个结构体变量中的,该结构体类型是由系统声明的 定义为 FILE  。

利用fopen返回一个指向FILE结构体的指针:
FILE *fopen( const char *filename, const char *mode );
filename:文件名,mode:打开的模式,规定了是可读、可写、追加之类的属性。
"r":可读,如果文件不存在,fopen调用失败
"w":可写,如果文件存在,那么原来的内容会被销毁。
"a":在文件尾追加,在新的数据写到文件里之前,不改变EOF标记,如果文件不存在,创建一个新的文件。
"r+":可读可写,文件必须存在。
"w+":打开一个空文件用来读写,如果文件存在,则内容被销毁。
"a+":可读可追加,在新的数据写到文件里之前,改变EOF标记;如果文件不存在,创建一个新的文件。
如果调用失败,返回一个空指针。

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
buffer:写入文件的内容;size:每一项的大小;count:写入了多少项;stream:指向文件的指针。返回值为写入的总的字节数。


如果打开失败,fopen函数将返回空指针 NULL
if((fp=fopen("file1","r"))==NULL){


    printf(“打开失败!”);
    exit(0);


}

 


文件操作———>关闭文件
关闭文件用close函数,fclose函数的调用的一般形式为
    fclose(文件指针);


例如:
   fclose(fp);  fp=0;


如果不关闭,文件将会丢失数据。


文件读写函数:


fgetc(由文件中读取一个字符)
相关函数 open,fread,fscanf,getc
表头文件 include<stdio.h>
定义函数 nt fgetc(FILE * stream);
函数说明 fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。
返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。
范例
#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“exist”,”r”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}

fgets(由文件中读取一字符串)
相关函数 open,fread,fscanf,getc
表头文件 include<stdio.h>
定义函数 har * fgets(char * s,int size,FILE * stream);
函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。
返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。
范例
#include<stdio.h>
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}

执行 this is a test /*输入*/
this is a test /*输出*/


fread()/fwrite()   数据块读写函数


   fread(字符串,数据块大小,数据块块数,文件指针);
   读取文件到字符串中


    fwrite(字符串,数据块大小,数据块块数,文件指针);
   写入字符串倒文件中
 


fscanf()/fprintf() 格式化读写函数
 
    fscanf(文件指针,格式化字符串,输入列表i);
    从文件中 按照 格式化字符串读取文件到 输入列表
 
    如: fscanf(*p,"%d,%d",&a,&b);


    fprintf(文件指针,格式化字符串,输入列表i)
   
rewind函数是文件标记指向开头,作用是使文件标记重新返回文件的开头
   rewind(文件指针)


fseek函数可以改变文件标记


   fseek(移动文件流的读写位置)
相关函数 rewind,ftell,fgetpos,fsetpos,lseek
表头文件 #include<stdio.h>
定义函数 int fseek(FILE * stream,long offset,int whence);
函数说明 fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。
参数 whence为下列其中一种:
SEEK_SET从距文件开头offset位移量为新的读写位置。SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。
下列是较特别的使用方式:
1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);
2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);
返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。
附加说明 fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。
范例
#include<stdio.h>
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
fgetpos(stream,&pos);
printf(“offset=%d/n”,pos);
pos=10;
fsetpos(stream,&pos);
printf(“offset = %d/n”,ftell(stream));
fclose(stream);
}

执行 offset = 5
offset =0
offset=10

ftell 函数用于测定文件位置标记的当前位置


    long i =ftell(fp);


   如果出错,返回 -1l;


feof检测是否到达文件结尾


   feof(文件指针)    返回针表示文件结束


putchar()  将字符串输出到显示器上显示。
putchar(10)  表示是一个换行符

fflush(更新缓冲区)
相关函数 write,fopen,fclose,setbuf
表头文件 #include<stdio.h>
定义函数 int fflush(FILE* stream);
函数说明 fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数stream为NULL,fflush()会将所有打开的文件数据更新。
返回值 成功返回0,失败返回EOF,错误代码存于errno中。
错误代码 EBADF 参数stream 指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。



     黑马IOS培训期待与您交流!



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值