文件IO编程十

来源:互联网 发布:mac强制关掉进程 编辑:程序博客网 时间:2024/05/22 17:22

(1) fgets 详解

函数:char *fgets(char *s, int size, FILE *stream);

说明:fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符,读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。 若成功则返回s指针,返回NULL则失败。


(2) fputs详解

函数:int fputs(const char *s, FILE *stream);

说明:fputs()用来将参数s所指的字符串写入到参数stream所指的文件中,成功则返回写出的字符个数,失败则返回EOF。

都是行缓冲,都是对文本文件操作。


程序:每次都读99个字节,会自动加上\0

char buf[10];

while(1)

{

bzero(buf, 100);

if(fgets(buf, 100, fp_src) == NULL)

{

if(feof(fp_src))

break;

if(ferror(fp_src))

{

perror("fgets() failed");

break;

}

}

fputs(buf, fp_dst);

}


上面介绍的是行缓冲,下面介绍的是块缓冲。而且下面的称为直接IO函数,二进制IO函数。

(3) fread/fwrite 详解

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

说明:参数stream为已经打开的文件指针,参数ptr为欲存放读取进来的数据空间,读取的字符以参数size*nmemb来决定。fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb来的小。则代表可能读到了文件尾或者失败,这时必须用feof()或者ferror()来判断。

函数:size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

说明:会返回实际写入的nmemb数目

假如有99个字符,size是20,nmemb是5,那么将返回4。此时比nmemb小1,就要进行判断


(3) ftell

函数:long ftell(FILE *stream);

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

程序:

char buf[20*5];

int nread;

long begin, end;

while(1)

{

bzero(buf, 20*5);

begin = ftell(fp_src);

int nread = fread(buf, 20, 5, fp_src);

if(nread < 5)

{

if(feof(fp_src))

{

end = ftell(fp_src);

fwrite(buf, end-begin, 1,fp_src);

break;

}

if(ferror(fp_src))

{

perror("fread() failed");

exit(1);

}

fwrite(buf, 20, 5,fp_src);

}

0 0
原创粉丝点击