论坛风格切换切换到宽版
  • 1168阅读
  • 5回复

[问题求助]关于lseek和fseek的用法分析 [复制链接]

上一主题 下一主题
离线yeats520.
 
发帖
2217
C币
-151825
威望
453
贡献值
1
银元
-3
铜钱
5084
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
这两个函数的定义我都看过了
一个是对流,一个是对文件
不过具体在用法上的差别.是还是不清楚.

前辈能不能举个实例啊
不甚感激
ps:UNIX环境高级编程 里面关于这部分的都看过了  还不是很理解,我智商不高,前.辈回答的时候尽量通俗易懂.点哈  再次谢谢    外汇

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线dummy111.
发帖
1989
C币
-605070
威望
359
贡献值
4
银元
0
铜钱
4426
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
相关内容在网上查了 没查到什么

发帖
2086
C币
-60314
威望
409
贡献值
1
银元
-1
铜钱
4738
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
fd = open()...
lseek



fp = fopen()
fseek

离线yy12345678.
发帖
1953
C币
-61089
威望
319
贡献值
1
银元
-5
铜钱
4298
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
   概念我很清楚了  其实就是不知道在实例中的具体应用

发帖
2005
C币
-235756
威望
360
贡献值
2
银元
-4
铜钱
4376
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13


QUOTE:这两个函数的定义我都看过了
一个是对流,一个是对文件
不过具体在用法上的差别是还是不清楚

前辈能不 ...
yanzhiyi1012 发表于 2010-01-24 21:22



    一个是对流,一个是对文件???

我觉得都是对文件,如果非要加上'流'的话,那就是都是针对文件流。

lseek是系统调用,在man手册中章节是:Section: System calls (2)
fseek是库函数,在man手册中章节是:Section: Linux Programmer's Manual (3)

fseek为了实现自己的动作,会去调用lseek。

这两个函数的返回值不同。

另外我在操作文件的offset的时候,从来都是用,fseek的相关函数。
#include <stdio.h>

int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
void rewind(FILE *stream);
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, fpos_t *pos);  


从来不直接用lseek函数。


也就是当你想用lseek的时候,fseek肯定能完成想要的动作。


例如取得文件长度:
UINT32 filesize(FILE *fp)
{
        UINT32 fSet,fEnd,filelen;  

        fseek(fp,0,SEEK_SET);  
          fSet = ftell(fp);  

        fseek(fp,0,SEEK_END);  
          fEnd = ftell(fp);  
        
        rewind(fp);

        return (filelen = fEnd - fSet);  
}

发帖
2105
C币
-235376
威望
396
贡献值
1
银元
-1
铜钱
4796
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
在例如:
你发现,要读取的文件,从起始位置开始,有10Byte是没用的,想从第11个开始读起,那么:
UINT32 start_remain = 10;
UINT8 tmp_buff[20];
fseek(fp,start_remain,SEEK_SET);
if(fread(tmp_buff,20,1,stream)){
...
}
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个