(五)LINUX文件编程(库函数方式)

本文介绍C语言中的文件操作,包括使用库函数进行文件读写的方法,文件指针的概念及其使用,以及fopen、fclose、fread、fwrite和fseek等关键函数的功能与用法。

 

1.核心理论

-库函数

基于C函数库的文件编程是独立于具体的操作系统 平台的,不管是在Windows、Linux还是其他的操 作系统中,都是使用这些函数。使用库函数进行程序 设计可提高程序的可移植性

-流

对于标准的C函数库,它们的操作都是围绕流来进行的。 流是一个抽象的概念,当程序需要读取数据的时候,就 会开启一个通向数据源的流,这个数据源可以是文件, 内存,或是网络连接。类似的,当程序需要写入数据 时候,就会开启一个通向目的地的流。这时候你就可以 想象数据好像在这其中“流”动一样。

-文件指针

在系统调用方式实现的文件访问中,使用文件描述 符(一个整数)来指向一个文件。在库函数方式的 文件访问中,使用FILE类型来表示一个打开的文 件,这个类型中包含了管理文件流的信息。这个类型中包含了管理文件流的信息。而指向 该类型的指针FILE* 则被称之为文件指针

 

2.函数学习-文件操作

打开文件

函数名 :   fopen

函数原形: 

FILE * fopen(const char * path,const char * mode);


函数功能:   

打开文件


所属头文件:     

<stdio.h>

返回值:

文件指针   失败则返回NULL,并把错误代码存在errno 中。

参数说明:    

path: 包含欲打开的文件路径及文件名
mode: 字符串则代表着流形态



mode有下列几种形态字符串:

r  打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。

w  打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾

 

关闭文件

函数名 :   fclose

函数原形:

int fclose(FILE * stream)


函数功能:   

关闭先前fopen()打开的文件


所属头文件:     

<stdio.h>

返回值:

若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno

参数说明:    

读文件

函数名 :  fread

函数原形:

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

函数功能:   

 fread()用来从文件流中读取数据

所属头文件:

<stdio.h>

返回值:           

返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,
则代表可能读到了文件尾或有错误发生,
这时必须用feof()或ferror()来决定发生什么情况

参数说明:

stream      为已打开的文件指针,
ptr         指向欲存放读取进来的数据空间
size*nmemb  读取的字符数

    

写文件

函数名 :   fwrite

函数原形:

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

函数功能:   

将数据写入文件流中

所属头文件:     

<stdio.h>

返回值:           

返回实际写入的nmemb数目

参数说明:   

stream 为已打开的文件指针,
ptr    指向欲写入的数据地址
size*nmemb  总共写入的字符数

 

文件定位

函数名 :   fseek

函数原形:

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

函数功能:   

移动文件流的读写位置

所属头文件:     

<stdio.h>

返回值:          

调用成功时则返回0,若有错误则返回-1,errno会存放错误代码

参数说明:    

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值