linux下如何通過lseek定位大檔案

2021-06-25 14:15:39 字數 1023 閱讀 2236

背景:

有一張16gb sd卡,插入開發板sd卡插槽,通過二進位制方式向裡面寫入資料,在通過lseek()函式定位時返回-1,(本意是通過lseek()獲取sd卡大小)**如下:

large_sd.c

#include #include #include #include #include #include int main(int argc, char *argv)

max_seek = lseek(fd,0,seek_end);

printf("max seek = %ld\n",max_seek);

return 0;

}

編譯: powerpc-linux-gcc -o large_sd large_sd.c

在開發板上執行,列印結果:

max seek = -1

後來通過搜尋發現,原來是lseek()溢位所致,修改**如下:

#include #include #include #include #include #include int main(int argc, char *argv)

max_seek = lseek(fd,0,seek_end);

printf("max seek = %lld\n",max_seek);

return 0;

}

編譯: powerpc-linux-gcc

-d_file_offset_bits=64 -o large_sd large_sd.c

再次在開發板上執行:

max seek = 15707668480

成功。

總結:

1.如果通過lseek()定位大檔案,返回值需要使用long long型變數接收,以防止溢位。

2.編譯時要加選項-d_file_offset_bits=64來定義_file_offset_bits為64

3.printf使用%lld來列印long long int 型。

linux下 lseek函式用法

lseek函式 用法 表頭檔案 include include 定義函式 off t lseek int fildes,off t offset,int whence seek set 引數offset即為新的讀寫位置 seek cur 當前讀寫位置後增加offset個位移量。seek end 將讀...

Linux下如何通過命令連線wifi

故事背景 我司是做新零售的,機器支援4g wifi 網線,可能會涉及到網路的切換和連線 專案需求 使用者在web端輸入wifi名稱和密碼,客戶端可以通過服務端下發的資訊進行連線 技術調研 之前提到過nmcli指令,這次他又來了 連線 nmcli device wifi connect wifinam...

Linux系統lseek函式作用

首先看下函式 off t lseek int fd,off t offset,int whence 所需要標頭檔案 include include 引數 fd 表示要操作的檔案描述符 offset是相對於whence 基準 的偏移量 whence 可以是seek set 檔案指標開始 seek cu...