fopen相关文件操作函数
2016-01-27 15:13
405 查看
typedef struct { int _fd; // 文件号 int _cleft; // 缓冲区中剩下的字节数 int _mode; // 文件操作模式 char * _nextc; // 下一个字节的位置 char * _buff; // 文件缓冲区位置 }FILE;
1.fopen
函数原型:FILE * fopen(const char * path,const char * mode);
头文件:
#include <stdio.h>
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
参数说明:
参数path字符串包含欲打开的文件路径及文件名;
mode有下列几种形态字符串:
mode字符串
含义
r
以只读方式打开文件,该文件必须存在
r+
以可读写方式打开文件,该文件必须存在
rb+
读写打开一个二进制文件,允许读写数据,文件必须存在
w
打开只写文件并清空文件内容。若文件不存在则建立该文件
w+
打开可读写文件并清空文件内容。若文件不存在则建立该文件
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb
只写打开或新建一个二进制文件;只允许写数据。
wb+
读写打开或建立一个二进制文件,允许读和写。
ab+
读写打开一个二进制文件,允许读或在文件末追加数据
wx
创建文本文件,只允许写入数据
wbx
创建一个二进制文件,只允许写入数据
w+x
创建一个文本文件,允许读写
wb+x
创建一个二进制文件,允许读写
w+bx
和”wb+x”相同
示例:
FILE *pF = fopen(pathName, "r"); //打开文件 fseek(pF, 0, SEEK_END); //文件指针移到文件尾 nLen = ftell(pF); //得到当前指针位置, 即是文件的长度 rewind(pF); //文件指针恢复到文件头位置 //读取文件内容//读取的长度和源文件长度有可能有出入,这里自动调整 nLen nLen = fread(msg, sizeof(char), nLen, pF); msg[nLen] = '\0'; //添加字符串结尾标志 fclose(pF); //关闭文件
2.fclose
函数原型:int fclose(FILE * stream);
头文件:
#include <stdio.h>
函数说明:fclose()用来关闭先前fopen()打开的文件. 此动作会让缓冲区内的数据写入文件中, 并释放系统所提供的文件资源.
返回值:若关文件动作成功则返回0, 有错误发生时则返回EOF 并把错误代码存到errno.
3.fseek
函数原型:int fseek(FILE * stream, long offset, int whence);
头文件:
#include <stdio.h>
函数说明:
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, SEEK_END);
返回值:当调用成功时则返回0, 若有错误则返回-1, errno 会存放错误代码.
附加说明:fseek()不像lseek()会返回读写位置, 因此必须使用ftell()来取得目前读写的位置.
off_t lseek(int fildes, off_t offset, int whence);
4.ftell
函数原型:long ftell(FILE * stream);
头文件:
#include <stdio.h>
函数说明:
ftell()用来取得文件流目前的读写位置.
参数说明:
stream 为已打开的文件指针.
返回值:
当调用成功时则返回目前的读写位置, 若有错误则返回-1, errno 会存放错误代码.可用ftell获得文件中数据的长度.
错误代码:EBADF 参数stream 无效或可移动读写位置的文件流.
5.fread
函数原型:size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);
头文件:
#include <stdio.h>
函数说明:
fread()用来从文件流中读取数据.
参数说明:
stream 为已打开的文件指针;
ptr 指向欲存放读取进来的数据空间;
nmemb 指定读取的字符数.
stream 为已打开的文件指针.
返回值:返回实际读取到的nmemb 数目,如果此值比参数nmemb 来得小, 则代表可能读到了文件的尾或有错误发生, 这时必须用feof()或ferror()来决定发生什么情况。
范例
#include <stdlib.h> #include <stdio.h> #include <string.h> #define nmemb 4 struct test{ char name[20]; int size; } s[nmemb]; int main() { FILE * stream; int i; stream = fopen("/tmp/fwrite", "r"); fread(s, sizeof(struct test), nmemb, stream); fclose(stream); for(i = 0; i < nmemb; i++) printf("name[%d]=%-20s:size[%d]=%d\n", i, s[i].name, i, s[i].size); return 0; }
执行结果:
name[0]=Linux! size[0]=6 name[1]=FreeBSD! size[1]=8 name[2]=Windows2000 size[2]=11
6.fwrite
函数原型:size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);
头文件:
#include <stdio.h>
函数说明:
fwrite()用来将数据写入文件流中.
参数说明:
stream 为已打开的文件指针,
ptr 指向欲写入的数据地址, 总共写入的字符数以参数size*nmemb 来决定.
stream 为已打开的文件指针.
返回值:返回实际写入的nmemb 数目.
7.rewind
函数原型:void rewind(FILE * stream);
头文件:
#include <stdio.h>
函数说明:
rewind()函数用于将文件指针重新指向文件的开头,同时清除和文件流相关的错误和eof标记,相当于调用fseek(stream, 0, SEEK_SET)
参数说明:
stream 为已打开的文件指针.
8.fgets
函数原型:char* fgets(char * s, int size, FILE * stream);
头文件:
#include <stdio.h>
函数说明:
fgets()用来从参数stream 所指的文件内读入字符并存到参数s 所指的内存空间, 直到出现换行字符、读到文件尾或是已读了size-1 个字符为止, 最后会加上NULL 作为字符串结束.
参数说明:
s 存放读到的数据
size s最大能存放多少数据
stream 已打开的文件指针
返回值:
gets()若成功则返回s 指针, 返回NULL 则表示有错误发生.
9.fputs
函数原型:int fputs(const char * s, FILE * stream);
头文件:
#include <stdio.h>
函数说明:fputs()用来将参数s 所指的字符串写入到参数stream 所指的文件内.
返回值:若成功则返回写入的字符个数, 返回EOF 则表示有错误发生.
10.fgetc
函数原型:int fgetc(FILE * stream);
头文件:
#include <stdio.h>
函数说明:
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); }
11.fputc
函数原型:int fputc(int c, FILE * stream);
头文件:
#include <stdio.h>
函数说明:fputc 会将参数c 转为unsigned char 后写入参数stream 指定的文件中.
返回值:fputc()会返回写入成功的字符, 即参数c. 若返回EOF 则代表写入失败.
12.feof
函数原型:int feof(FILE * stream);
头文件:
#include <stdio.h>
函数说明:feof()用来侦测是否读取到了文件尾, 尾数stream 为fopen()所返回之文件指针. 如果已到文件尾则返回非零值, 其他情况返回0.
返回值:返回非零值代表已到达文件尾.
13.fflush
函数原型:int fflush(FILE* stream);
头文件:
#include <stdio.h>
函数说明:
fflush()会强迫将缓冲区内的数据写入参数stream 指定的文件中.
如果参数stream 为NULL,fflush()会将所有打开的文件数据更新.
返回值:成功返回0, 失败返回EOF, 错误代码存于errno 中.
错误代码:EBADF 参数stream 指定的文件未被打开, 或打开状态为只读. 其它错误代码参考write().
14.fscanf
函数原型:int fscanf(FILE*stream,constchar*format,[argument...]);
头文件:
#include <stdio.h>
函数说明:
从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
参数说明:
FILE *stream:文件指针
char *format:格式字符串
[argument…]:输入列表
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
格式类型
说明
%d
读入一个十进制整数
%i
读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25
%u
读入一个无符号十进制整数
%f %F %g %G
用来输入实数,可以用小数形式或指数形式输入
%x %X
读入十六进制整数
%o
读入八进制整数
%s
读入一个字符串,遇空字符‘\0’结束
%c
读入一个字符。无法读入空值。空格可以被读入
15.fprintf
函数原型:int fprintf (FILE* stream, const char*format, [argument]);
头文件:
#include <stdio.h>
函数说明:
传送格式化输出到一个文件中与打印机输出
参数说明:
FILE*stream:文件指针
const char* format:输出格式
[argument]:附加参数列表
返回值:
输出的字符数,发生错误时返回一个负值
16.fdopen
函数原型:FILE * fdopen(int fildes, const char * mode);
头文件:
#include <stdio.h>
函数说明:
fdopen()会将参数fildes 的文件描述词, 转换为对应的文件指针后返回.
参数mode 字符串则代表着文件指针的流形态,
注意此形态必须和原先文件描述词读写模式相同. 关于mode 字符串格式请参考fopen().
返回值:转换成功时返回指向该流的文件指针. 失败则返回NULL, 并把错误代码存在errno 中.
范例:
#include <stdio.h> int main() { FILE * fp = fdopen(0, "w+"); fprintf(fp, "%s\n", "hello!"); ; fclose(fp); return 0; }
17.fileno
函数原型:int fileno(FILE * stream);
头文件:
#include <stdio.h>
函数说明:fileno()用来取得参数stream 指定的文件流所使用的文件描述词.
返回值:返回文件描述词.
范例:
#include <stdio.h> int main() { FILE * fp; int fd; fp = fopen("/etc/passwd", "r"); fd = fileno(fp); printf("fd=%d\n", fd); fclose(fp); return 0; }
18. freopen
函数原型:FILE * freopen(const char * path, const char * mode, FILE * stream);
头文件:
#include <stdio.h>
函数说明:
参数 path 字符串包含欲打开的文件路径及文件名。
参数mode 请参考fopen()说明.。
参数stream 为已打开的文件指针. Freopen()会将原stream 所打开的文件流关闭, 然后打开参数path 的文件。
返回值:文件顺利打开后, 指向该流的文件指针就会被返回. 如果文件打开失败则返回NULL, 并把错误代码存在errno 中。
范例:
#include <stdio.h> int main() { FILE * fp; fp = fopen("/etc/passwd", "r"); fp = freopen("/etc/group", "r", fp); fclose(fp); return 0; }
相关文章推荐
- Linux下配置和使用ACE
- Vim 编辑器常用命令和快捷键的学习
- linux文件系统剖析
- Opencv 使用Rect选取与设置窗口ROI
- Opencv 使用Rect选取与设置窗口ROI
- Nginx配置文件优化
- Hadoop平台搭建
- openwrt 内核编译纪要
- nfs安装与配置笔记
- 使用Linux模拟FC存储阵列(targetcli)
- Centos yum源配置
- Linux文件管理
- Linux的网卡相关
- 详解Nginx服务器中map模块的配置与使用
- 配置网站的默认小图标
- linux下环境搭建
- 基于色卡的颜色识别和色调识别-基于颜色的图像检索
- Apache POI使用详解(excel为主)
- 2-Linux-虚拟机系统安装
- Linux文件系统的实现