0
爲了跟蹤I/O調用,我在運行程序時在LD_PRELOAD共享庫中覆蓋了fwrite
。在我的版本的fwrite
,我得到的絕對使用fwrite中偏移量的奇怪值
long int pos = ftell(stream);
值然後傳遞給需要的size_t參數(因此無符號長)函數寫的偏移,並打印值。
我遇到了一些調用18446744073709551615作爲偏移量(2^64 - 1),所以我猜ftell返回的初始long int是-1。這些操作總是寫10個字節。
所以我的問題是:什麼可能導致流偏移設置爲-1?
我不追蹤那些奇怪的fwrites正在訪問的文件的名稱,所以我不知道什麼被訪問。另外我應該確定該程序是一個MPI程序。有可能涉及到的流實際上是套接字,或者是其他文件...
'errno'設置爲什麼? –
'stream'不是可搜索的(例如套接字,管道......)確實會導致'ftell()'返回-1(在這種情況下,errno應該是'EBADF') –
所以我想這是答案。謝謝!我會添加一個測試,該文件是一個常規的文件。有人應該真的告訴我,如果某人在評論中發佈答案時如何將問題標記爲答案,那麼...... – sunmat