fwrite中偏移量的奇怪值

时间:2014-03-06 13:07:28

标签: c fwrite ftell

为了跟踪I / O调用,我在运行程序时在LD_PRELOAD的共享库中覆盖了fwrite。在我的fwrite版本中,我使用

得到写入的绝对偏移量
long int pos = ftell(stream);

然后将值传递给一个带有size_t参数的函数(所以unsigned long),并打印该值。

我遇到了一些18446744073709551615作为偏移(2 ^ 64 - 1)的调用,所以我猜ftell返回的初始long int是-1。这些操作总是写10个字节。

所以我的问题是:什么可以将流偏移设置为-1?

我没有跟踪那些奇怪的fwrit所访问文件的名称,所以我不知道访问了什么。另外,我应该确切地说该程序是MPI程序。所涉及的流可能实际上是一个套接字,或者不是文件......

1 个答案:

答案 0 :(得分:0)

-1来自ftell的返回值表示已设置errno。以下是联机帮助页面中的relivenat文本:

  

ftell()返回当前偏移量。否则,返回-1并设置errno以指示错误。