免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: surfchen
打印 上一主题 下一主题

fseeko在64位机器上导致fread失败 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-03-20 18:56 |只看该作者
rs:0
其他的输出和你们的一样。

论坛徽章:
0
12 [报告]
发表于 2008-03-20 18:58 |只看该作者
当然off_t的size在64位是8bytes,在32位是4 bytes。这个你们应该是清楚的。

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
13 [报告]
发表于 2008-03-20 20:38 |只看该作者
这么简单的问题还没搞定啊!

把你编译命令贴上来.

论坛徽章:
0
14 [报告]
发表于 2008-03-21 10:21 |只看该作者
不是搞不搞得定的问题。要解决这个问题当然很简单,就是用fseek,或者使用off_t变量来存储所有的偏移。

我现在是想知道fseeko在64bits上出现这个问题,究竟是为什么。

编译命令我就不贴了,我想是个程序员都应该知道这段代码如何编译。对于醉卧水云间在几个帖子之前提出的用fseeko64,那更是太离谱了,当然这个我在随后的那个帖子里已经说清楚了。

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
15 [报告]
发表于 2008-03-21 11:03 |只看该作者
这个问题完全看你怎么去编译, 编译命令是否正确, 是个程序员都应该知道这段代码如何编译? NO, 我猜你就没搞对.

论坛徽章:
0
16 [报告]
发表于 2008-03-23 14:51 |只看该作者
顶一次

论坛徽章:
0
17 [报告]
发表于 2008-03-23 23:52 |只看该作者
原帖由 surfchen 于 2008-3-20 17:54 发表
(off_t)-8是可以的。


看起来是编译器自动转换类型的时候,没有正确第把(-转换成off_t类型.

论坛徽章:
0
18 [报告]
发表于 2008-03-25 22:48 |只看该作者
pos#1:8
pos#2:0
size:4
rs:1
上面是在我机器上的结果,没问题啊。。。。

论坛徽章:
0
19 [报告]
发表于 2008-05-20 10:24 |只看该作者
知道问题所在了。详情请看:http://www.unix.org/version2/whatsnew/lfs20mar.html

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2008-05-20 10:30 |只看该作者
FSEEK(3)                   Linux Programmer’s Manual                  FSEEK(3)

NAME
       fgetpos, fseek, fsetpos, ftell, rewind - reposition a stream

SYNOPSIS
       #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);

这里的关键是long捣乱
在64位LINUX里面,fseek可以直接处理大于4GB文件,因为long是8字节
fseek64是32位系统处理大文件用的,属于补丁函数,
64位系统不要用这些带有补丁性质的函数

进入64位系统以后,什么fseek大文件问题啦,2038问题啦,都是莫须有的事情
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP