论坛风格切换切换到宽版
  • 651阅读
  • 4回复

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

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

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

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

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线tanweihai.
发帖
2003
C币
-193495
威望
363
贡献值
1
银元
-3
铜钱
4592
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-10
相关内容在网上查了 没查到什么

离线citurlong.
发帖
2070
C币
-235437
威望
395
贡献值
1
银元
-3
铜钱
4735
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-10
fd = open()...
lseek



fp = fopen()
fseek

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

发帖
2027
C币
-139378
威望
384
贡献值
1
银元
0
铜钱
4613
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-10


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);  
}

快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个