位置指示器
有个问题想请问一下,c语言中的rewind()、fseek()等函数可以改变文件位置指示器的位置,可以用这些函数来改变向文件写入数据时的位置吗?我试了,好像不能,不知道对不对.
//----------------------------------------------------------------------------//
二进制I/O:fread() 和 fwrite() 函数
//----------------------------------------------------------------------------//
fwrite()函数的原型是:
size_t fwrite(const void * restrict ptr,
size_t size,
size_t nmemb,
FILE * restrict fp
);
fwrite() 函数将二进制数据写入文件。size_t类型是根据标准C类型定义的。
它是sizeof运算符返回的类型,通常是unsigned int类型,不过具体的实现中可以
选择其他类型。
指针 ptr 是要写入的数据块的地址。size 表示要写入的数据块的大小(以字
节为单位)。nmemb 表示数据块的数目。fp 指定要写入的文件。 例如,要保存一
个 256 字节大小的数据对象(例如一个数组),可以这样做:
char arr[256];
fwrite(arr, 256, 1, fp);
这个函数调用一次将 256 字节大小的arr数组写入到文件。
或者
double ent[10];
fwrite(ent, sizeof(double), 10, fp);
这个函数调用将 ent 数组中的数据写入文件,数据分成10块,
每块都是 double 大小。
fwrite() 中的 void * ptr。
fwrite() 的一个问题就是它的第一个参数不是一个固定类型。
在 ANSI C 函数原型下,这些实际参数都被转换成为指向 void 的指针,这种
指针可以作为一种普通的指针类型工作(ANSI C以前的C对这一参数使用char * 类
型,需要将实际参数的类型指派为这一类型)。
fwrite()函数返回成功写入的项目数。 正常情况下,它与nmemb相等,不过如
果有写入错误的话返回值就会小于 nmemb。
//----------------------------------------------------------------------------//
fread() 函数的原型是:
size_t fread(void * restrict ptr,
size_t size,
size_t nmemb,
FILE * restrict fp
);
ptr 为存储读入的文件数据的内存地址,fp 制定要读取的文件。
使用这个函数来读取通过 fwrite() 写入的文件数据。
例如,要恢复前一个例子中保存的包含10个double值的数组,可以使用以下函数
用调:
double ent[10];
fread(ent, sizeof(double), 10, fp);
该调用将10个double值复制到ent数组中。
fread() 函数返回成功读入的项目数。正常情况下,它与 nmemb 相等;不过
如果有读取错误的话,返回值就会小于 nmemb。
//----------------------------------------------------------------------------//
int feof(FILE * fp) 和 int ferror(FILE * fp) 函数
当标准输入函数返回 EOF 时,通常表示已经到达了文件结尾。 可是,这也有
可能表示发生了读取错误。使用 feof() 和 ferror() 函数可以区分这两种可能性。
如果最近一次输入调用监测到文件结尾, feof() 函数返回一个非零值,否则返回
零值。如果发生读取错误,ferror() 函数返回一个非零值,否则返回零值。
//----------------------------------------------------------------------------//