文件流操作函数

来源:互联网 发布:如何利用蜂窝网络定位 编辑:程序博客网 时间:2024/05/24 01:22

#include<stdio.h>
void clearerr(FILE * stream);
clearerr()清除参数 stream指定的文件流所使用的错误旗标。

int fclose(FILE * stream);
fclose()用来关闭先前 fopen()打开的文件。此动作会让缓冲区
内的数据写入文件中,并释放系统所提供的文件资源。若关文件动作成功则返回 0,有错误发生时则返回 EOF并把错误代码存到 errno

FILE * fdopen(int fildes,const char * mode);
fdopen()会将参数 fildes的文件描述词,转换为对应的文件指针后返回。参数 mode字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于 mode字符串格式请参考 fopen()。

int feof(FILE * stream);
feof()用来侦测是否读取到了文件尾,尾数 stream为 fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回 0。

int fflush(FILE* stream);
fflush()会强迫将缓冲区内的数据写回参数 stream指定的文件中。如果参数 stream为 NULL,fflush()会将所有打开的文件数据更新。成功返回 0,失败返回 EOF,错误代码存于 errno中。

int fgetc(FILE * stream);
fgetc()用来从参数 stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回 EOF。
fgetc()会返回读取到的字符,若返回 EOF则表示到了文件尾。
fp=fopen("exist","r");
while((c=fgetc(fp))!=EOF)
 printf("%c",c);

char * fgets(char * s,int size,FILE * stream);
fgets()用来从参数 stream所指的文件内读入字符并存到参数 s所指的内存空间,直到出现换行字符、读到文件尾或是已读了 size-1个字符为止,最后会加上 NULL作为字符串结束。
fgets()若成功则返回 s指针,返回 NULL则表示有错误发生。
fputs(fgets(s,80,stdin),stdout);

int fileno(FILE * stream);
fileno()用来取得参数 stream指定的文件流所使用的文件描述词。

FILE * fp;int fd;fp=fopen("/etc/passwd","r");fd=fileno(fp);printf("fd=%d\n",fd);fclose(fp);

FILE * fopen(const char * path,const char * mode);
函数说明返回值附加说明范例
参数 path字符串包含欲打开的文件路径及文件名,参数 mode字符串则代表着流形态。mode有下列几种形态字符串:
r打开只读文件,该文件必须存在。
r+打开可读写的文件,该文件必须存在。
w打开只写文件,若文件存在则文件长度清为 0,即该文件内容会消失。若文件不存在则建立该文件。
w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

int fputc(int c,FILE * stream);
fputc会将参数 c转为 unsigned char后写入参数 stream指定的文件中。
fputc()会返回写入成功的字符,即参数 c。若返回 EOF则代表写入失败。

char a[26]="abcdefghijklmnopqrstuvwxyz";int i;fp= fopen("noexist","w");for(i=0;i<26;i++) fputc(a[i],fp);fclose(fp);

int fputs(const char * s,FILE * stream);
fputs()用来将参数 s所指的字符串写入到参数 stream所指的文件内。若成功则返回写出的字符个数,返回 EOF则表示有错误发生。

size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
fread()用来从文件流中读取数据。参数 stream为已打开的文件指针,参数 ptr指向欲存放读取进来的数据空间,读取的字符数以参数 size*nmemb来决定。fread()会返回实际读取到的 nmemb数目,如果此值比参数 nmemb来得小,则代表可能读到了文件尾或有错误发生,这时必须用 feof()或 ferror()来决定发生什么情况。
返回实际读取到的 nmemb数目。

#define nmemb 3 struct test { char name[20]; int size; }s[nmemb]; void 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); }


 

FILE * freopen(const char * path,const char * mode,FILE * stream);
参数 path字符串包含欲打开的文件路径及文件名,
参数 mode请参考 fopen()说明,
参数 stream为已打开的文件指针。
freopen()会将原 stream所打开的文件流关闭,然后打开参数 path的文件。
文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL,并把错误代码存在 errno中。

FILE * fp;fp=fopen("/etc/passwd","r");fp=freopen("/etc/group","r",fp);fclose(fp);

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);
fseek()不像 lseek()会返回读写位置,因此必须使用 ftell()来取得目前读写的位置。

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

long ftell(FILE * stream);
ftell()用来取得文件流目前的读写位置。参数 stream为已打开的
文件指针。当调用成功时则返回目前的读写位置,若有错误则返回 -1,errno会存放错误代码。

size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
fwrite()用来将数据写入文件流中。参数 stream为已打开的文件指针,参数 ptr指向欲写入的数据地址,总共写入的字符数以参数 size*nmemb来决定。fwrite()会返回实际写入的 nmemb数目。
返回实际写入的 nmemb数目。

int getc(FILE * stream);
getc()用来从参数 stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回 EOF。虽然 getc()与 fgetc()作用相同,但 getc()为宏定义,非真正的函数调用。

int getchar(void);
getchar()用来从标准输入设备中读取一个字符。然后将该字符从 unsigned char转换成 int后返回。getchar()非真正函数,而是 getc(stdin)宏定义。

char * gets(char *s);
gets()用来从标准设备读入字符并存到参数 s所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上 NULL作为字符串结束。
gets()若成功则返回 s指针,返回 NULL则表示有错误发生。
由于 gets()无法知道字符串 s的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题。建议使用 fgets()取代。

int putc(int c,FILE * stream);
putc()会将参数 c转为 unsigned char后写入参数 stream指定的文件中。虽然 putc()与 fputc()作用相同,但 putc()为宏定义,非真正的函数调用。
putc()会返回写入成功的字符,即参数 c。若返回 EOF则代表写入失败。

int putchar (int c);
putchar()用来将参数 c字符写到标准输出设备。
putchar()会返回输出成功的字符,即参数 c。若返回 EOF则代表输出失败。putchar()非真正函数,而是 putc(c,stdout)宏定义。

int atexit (void (*function)(void));
atexit()用来设置一个程序正常结束前调用的函数。当程序通过调用 exit()或从 main中返回时,参数 function所指定的函数会先被调用,然后才真正由 exit()结束程序。

#include<stdlib.h> void my_exit(void) { printf("before exit () !\n"); } void main() { atexit (my_exit); exit(0); }

 

原创粉丝点击