为了跟踪I/O调用,我在运行程序时在共享库中覆盖了fwrite
。在我的fwrite
版本中,我使用
long int pos = ftell(stream);
然后,该值将传递给一个size_t参数(如此无符号长)并打印值的函数。
我遇到了一些与184446744073709551615的呼叫,作为偏移(2^64-1),所以我想FTELL返回的最初长时间是-1。这些操作总是写10个字节。
所以我的问题是:什么可能导致流偏移设置为-1?
我不追踪那些奇怪的fwrites访问的文件的名称,因此我不知道正在访问什么。我也应该确保该程序是一个MPI程序。涉及的流实际上可能是插座,也可能是文件以外的其他东西...
-1从ftell返回值表示设置了errno。这是来自Manpage的Relivenat文本:
ftell()返回当前偏移。否则,返回-1并将ERRNO设置为指示错误。