c语言pread用法,C pread给出了不同的结果

我有两个系统。一个是Intel CPU上的Ubuntu 14.04 64bit,另一个是CubieTruck上的ARM 14.04。C pread给出了不同的结果

英特尔系统有一个存储在ext4格式化硬盘上的数据文件。 CubieTruck在与NTFS-3G一起安装的NTFS硬盘上具有相同的文件。

我目前在这些系统上有pread()问题。我从文件中读取了一堆字节,并从这个块中打印出第一个64字节。后来,这些字节被用来使用Shabal计算一些哈希值。

虽然打印在CubieTruck上的数据与使用十六进制编辑器打开文件时在Windows系统上看到的完全一致,但64位Ubuntu上的输出却不同。它看起来像是充满了“FFFFFF”,但一般来说也不同。更奇怪的是,尽管CubieTruck上的输出总是保持不变,但在一段时间后它会在64位的Ubuntu系统上发生变化(当我发现这种情况时我还没有看到过某种模式,我只是时不时地检查)。

但最令人讨厌的是,x64系统似乎可以正确计算,而ARM系统是错误的。

我不知道为什么pread会在这些系统下为同一个文件提供不同的结果,但我希望有人能够对此有所了解。

编辑,代码:

int main(int argc, char **argv) {

unsigned int readsize = 16384 * 32 * 2;

char *cache = (char*) malloc(readsize);

int fh = open("/home/user/somefile", O_RDONLY);

if (fh < 0) {

printf("can't open file");

exit(-1);

}

int bytes = 0, b;

do {

b = pread(fh, &cache[bytes], readsize - bytes, bytes);

bytes += b;

} while(bytes < readsize && b > 0);

int i = 0;

for (i=0; i < 64; i++) {

printf("%02X", cache[i]);

}

close(fh);

free(cache);

return 0;

}

两个系统都打开完全相同的文件。

结果在x64:在ARM FFFFFF94FFFFFFF16D25FFFFFFC0FFFFFFA3367D010BFFFFFFEF1E12FFFFFF841CFFFFFFBE4C26FFFFFF92FFFFFF80FFFFFF86FFFFFFA822FFFFFF8A26FFFFFF906CFFFFFFAD05FFFFFFE7FFFFFFB124FFFFFFA8FFFFFFF77B16FFFFFFEAFFFFFFACFFFFFF9DFFFFFF9EFFFFFF81FFFFFFC7FFFFFF92FFFFFFCDFFFFFFB0FFFFFFE86270FFFFFFF974FFFFFFA8420C45FFFFFFFC04FFFFFFF9103F2E3A47FFFFFF990F

结果: 94F16D25C0A3367D010BEF1E12841CBE4C26928086A8228A26906CAD05E7B124A8F77B16EAAC9D9E81C792CDB0E86270F974A8420C45FC04F9103F2E3A47990F

你可以看到,在x64,结果充满了 “FFFFFF”,而它的出现,这个我稍后需要某种程度的帮助。但我不明白为什么它在我的系统上有所不同。

2014-09-21

nim

+0

*正是*他们在读什么,然后怎么样*究竟*他们是否使用过(问题的类型**代码**会很好地回答;你已经告诉过我们,现在*显示它*)。 –

2014-09-21 15:48:25

+0

用代码更新了我的问题,并得到了确切的结果。 –

2014-09-21 16:08:49

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值