????文件I/O編程處理open、read、write、close,等必要函數對文件進行讀寫操作外,lseek、fcntl也是I/O編程很重要的函數。
????????lseek函數
??
lseek函數主要用來移動當前讀寫位置,第一個參數是文件描述符fd,第二個參數是偏移距離,第三個參數是文件內容指針宏,分別有SEEK_SET(文件頭),SEEK_CURR(當前位置),SEEK_END(文件尾部)。該函數的執行成功返回文件當前位置的偏移量,若是失敗返回-1.
改變文件位置指針很重要,如果處理不好會出現讀寫文件時讀取錯誤數據或者將數據寫在錯誤的位置,如下例打開或者創建一個文件,將要寫的內容寫進文件之后,文件位置指針指向文件的末尾,當沒有關閉文件的情況下如果要再次將文件內容讀取出來,那必定讀不到想要的數據,必須要將文件位置指針重新至于文件的開頭。這樣改變位置,就不需要再次關閉文件再去讀。
????lseek通常還可以用來衡量一個文件的大小,如上述打開的文件,要獲取該文件的大小,即int filesize=lseek(fd,0,SEEK_END);filesize即為該文件的大小。
????lseek還可以用來幫助創建一個空洞文件。如:程序中lseek設置好相應大小的偏移量,但是還是注意一點,設置好偏移量之后必須要有一條write的函數,寫一個東西,否則空洞文件創建不成功,大小還是0.程序運行結果如下
轉載于:https://blog.51cto.com/10274409/1698478