文件流操作函数

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值