标准I/O函数fgets()的用法?//linux C编程
首先往/home/ryan/file里写入字符串"hello\nworld\n",然后关闭流fp,再重新打开流,从文件/home/ryan/file读取字符串的时候能将字符串显示在标准输出。但是如果将字符串"hello\nworld\n"写入/home/ryan/file后,没有关闭流,而是直接对该流执行fgets(),标准输出没有显示任何字符。请问这是为何?
#include<stdio.h>
int main()
{
FILE * fp = NULL;
char * retchar = NULL;
char output[] = "hello\nworld\n";
char buf[32]={0};
if (NULL == (fp = fopen("/home/ryan/file","w+")));
{
perror("open /home/ryan/file");
exit(1);
}
fputs(output,fp);
fclose(fp);
fopen("/home/ryan/file","r");
while((retchar = fgets(buf,32,fp))!=NULL)
{
puts(buf);
}
fclose(fp);
return 0;
}
------解决方案--------------------将文件指针fseek偏移到文件头部。
------解决方案--------------------
修改一下。重新打开文件,把文件六指针指向文件的开头。
fp=fopen("/home/ryan/file","r");
fseek(fp, 0, SEEK_SET);
while((retchar = fgets(buf,32,fp))!=NULL)
{
puts(buf);
}
fclose(fp);
return 0;
fseek 重定位流(数据流/文件)上的文件内部位置指针
注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。