fseek函式在C語言裡面是偏移,還是改變指標?

時間 2021-06-03 15:16:33

1樓:propig

The fseek() functionsets the file position indicatorfor the stream pointed to by stream. The new position, measured in bytes, is obtained by adding offset bytes to the position specified by

whence. If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END, the offset is relative to the start of the file, the current position indicator, or end-of-file, respectively. A successful call to

the fseek() function clears the end-of-file indicator for the stream and undoes any effects of the ungetc(3) function on the same stream.

2樓:阿on哦

原理是指標的偏移。

fseek 會呼叫 lseek,lseek 的功能是修改 file table 中 file 資料結構的 offset(核心層),offset(核心層)的值是由 offset(應用層)和 whence 計算而來。

接下來的讀、寫操作會呼叫 read 或者 write 系統呼叫,系統呼叫把 file table 中的 offset 作為它們的起始字元偏移量。如果該偏移量所對應的檔案塊已經載入到了記憶體中,核心會把這部分內容傳遞到應用層的快取中,並修改 *fp->ptr,其中 *fp->ptr 是應用層快取中的指標。如果該偏移量所對應的檔案塊還沒有載入到記憶體中,那麼就會產生乙個異常,接下來的工作就由核心的記憶體管理模組接手,它會計算出由引數 offset(核心層)所指定的字元位於檔案的哪個 block(會用到檔案的 inode,硬碟的 superblock),然後將該 block 載入到記憶體中,然後再將控制權交還給 read 或者 write 系統呼叫。

fseek 的實現 - only_eVonne - 部落格園

在C語言中,函式呼叫前是否必須先宣告?

大江 我的理解是,所呼叫函式可能的返回值型別不同占用的記憶體空間大小不一樣的,而返回值是需要放在臨時空間裡的,所以你需要告訴編譯器需要多少的記憶體空間,比如int需要4位元組,double需要8位元組,如果不寫,編譯器假定留出最通用的4位元組給臨時變數。當然這跟規範和標準以及編譯器的實現有關。如果以...

在C C 語言裡面,是否可以返回乙個函式指標?有什麼意義?

首先先寫乙個函式 void foo 這個函式執行完了發返回乙個函式指標 void foo C語言不能執行時構建函式所以不能函式返回函式定義引數傳入的函式也需要是定義好的 include include void funcable void fvoid p void malloc sizeof voi...

為什麼c語言編寫s函式在閉環計算中就會錯誤?

李雅普諾夫不穩定 如果你的s函式沒有寫錯的話,個人認為可能是函式的取樣執行頻率設定得不夠理想,如果你的s函式使用的是離散型s函式,可以嘗試提高取樣執行頻率,另外其取樣時間應該是你的powergui的整數倍。至於然後就是可以嘗試在s函式前加乙個memory模組,將時序調整一下,迭代時時序存在一到兩個差...