fstream

C++在ubuntu下读取数据,原来在VC下读过的,全忘记了,哎。


http://hi.baidu.com/hpagent/blog/item/86eac034c9be1e3d0a55a9c3.html


fpos_t pos 的赋值 文件流定位

#include<stdio.h>

                   int fgetpos(FILE *fp, fpos_t *pos) :获取当前文件流指针位置。

                    int fsetpos(FILE *fp, fpos_t *pos) :设置文件流指针位置。

                    int fseek(FILE *fp, long offset, int whence) :设置文件流指针位置

                          offset: 偏移量,可以为负,表示向上偏移

                          whence: 起始位置:从什么位置开始偏移,可为:SEEK_SET(开始位置)、SEEK_CUR(中间位置)、SEEK_END(结尾)

s_t fpos_t

在/usr/include/_G_config.h
typedef struct
{
   __off_t __pos;
__mbstate_t   __state;

}_G_fpos_t;

pos.__pos=140.
fsetpos(fp,&pos);

在不知道fpos_t结构体的第一个成员的时候,当然也可以采用指针的方式,比如:

int *p =(int)&pos;

*p = 140;

fsetpos(fp,&pos);

当然上边说的这么多都是指在linux下,但是在windows(VC)下会有一些区别,在vc下fpos_t被定义为long型,所以在window下就可以直接去给pos赋值了。。。

=====================================================================================

fseek(文件类型指针,位移量,起始点);
这里,“起始点”可以用标识符表示,也可以用数字来表示。表示起始点的标识符和对应的数字如表10.2所示。
起始点 标识符 用数字表示
文件开始位置 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾位置 SEEK_END 2

“位移量”是以“起始点”为基点移动的字节数。C语言要求位移量是长整型数,规定在数字的末尾加一个字母L,就表示是长整型数,这样当文件长度超过64K时不会出现问题。
对于二进制文件,当位移量为正整数时,表示位置指针从指定的起始点向文件尾部方向移动;当位移量为负整数时,表示位置指针从指定的起始点向文件首部方向移动。
例如:指针fp已指向一个二进制文件,能使位置指针从文件的开头向文件尾部移动20个字节的fseek( )函数的调用如下:

fseek(fp,20L,SEEK_SET);     或fseek(fp,20L,0);

再例如:fp已指向一个二进制文件,能使位置指针从文件的尾部向文件开头移动10个sizeof(int)的函数调用如下:

fseek(fp, -10L*sizeof(int),SEEK_END); 或 fseek(fp, -10L*sizeof(int),2);

注意,fseek函数对文本文件和二进制文件的处理方式有所不同。对于二进制文件,可以获得准确的定位。对于文本文件要注意如下的问题,首先文件偏移量必须为0或者通过ftell函数获得的文件指针的当前位置,并且相对位置的起始点必须为SEEK_SET。
另外fseek将指针移动到文件的开始和结束位置时,产生一个文件状态标志,必须使用clearerr函数清除文件状态标志后,才可以继续读写此文件

当文件操作出错后,文件状态标志为非零值,此后所有的文件操作均无效。如果希望继续对文件进行操作,必须清除此错误标志后,才可以继续操作。

clearerr(FILE*);

返回值,0移动成功;-1移动失败。


你可能感兴趣的:(windows,linux,struct,File,ubuntu,FP)