背景:
有一張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...