回 帖 发 新 帖 刷新版面

主题:[讨论]关于fgetpos和fsetpos两个I/O函数

我就很单纯的想问一问,fgetpos的作用是什么?
书上说,fseek和ftell两个函数的潜在问题是数据会大于long类型,然后书本就介绍了fgetpos和fsetpos两个函数
。。。我就以为这两个函数是是fseek和ftell两个函数的加强版。。。

例如我读取某个TXT文件,从文件开始处前移5个位置,这么调用函数fseek(file, 5L, SEEK_SET)就做到了。
用fsetpos(file,&p)其中p已经定义为fpos_t类型,数值为5.也可以达到同样的目的.

我就想问一问.

fgetpos这个函数有什么作用?
看<c primer plus>一书里的介绍,看不明白啊.

如前面所达到的目的.从文件开始处前移5个位置.
我这样调用函数fgetpos(file, &p);其中p已经定义为fpos_t类型,数值为5.
可是结果却是每一次都从第一个位置开始写入数据,而不是第5个,我是这么想的.我的p变量值都设为5了.为啥这函数不听话呢?
也许是我不懂,所以我来求助了.
这函数有什么作用...
求大大给个例子.

回复列表 (共3个回复)

沙发

说实话,还真没研究过这个。

《UNIX环境高级编程》第二版英文原版147页有介绍
ftell/fseek   ftello/fseeko    fgetpos/fsetpos三个系列的函数。

功能都是相近的

前两者的区别是参数一个是long,一个是off_t(这个off_t可能比long要大)。

其实书上对fgetpos/fsetpos也没有做过多的介绍,只是参数是fpos_t,据书上说,这两个函数是ISO C的,fpos_t参数可以足够大来记录文件的位置。

所以我个人所见是,fgetpos/fsetpos的扩展性应该更好,支持更大的文件。

板凳


是呀,就因为书里没有讲过,我才郁闷啊。目前我仅仅知道fgetpos貌似不能改变文件指针指向的位置。。。貌似都是0。。。

3 楼

听你说的,我感觉你是不是fsetpos和fgetpos用反了

我来回复

您尚未登录,请登录后再回复。点此登录或注册