在Linux下建立大檔案
在Linux c程式中建立一個2G的檔案,迴圈寫1KB的資料,共2*1024*1024次,最後一次寫失敗,
n=write(fd,buf,1024),n總是等於1023<1024,檔案大小顯示為2147483647B;
然後我又測試了往一個1G的檔案中再追加1G的資料,迴圈寫1KB的資料,共1024*1024次,也是最後一次寫失敗,問題同上。
write error ,write size is 1023(到2GB的最後一次寫檔案時,寫不了1024個位元組,只能寫1023個位元組)
後來百度了下,可能是Linux檔案系統對檔案大小的限制,尤其是看到了“Linux下2G檔案限制解決方案”的東西后,我也不管三七二十一,就下載netkit-ftp-0.18-pre1.tar.gz,解壓縮後,修改ftp/ftp.c,ftp/main.c 加入
#define _LARGEFILE_SOURCE //for LFS support
#define _FILE_OFFSET_BITS 64 //for LFS support
然後./configure && make 下,用ftp/ftp檔案覆蓋系統自帶的ftp客戶端,結果發現根本和我遇到的問題無關。
再檢查我的檔案系統是ext3,檔案大小上限可達16G,按理可以成功建立2G的檔案的。後來終於看到網上某個人發了“在LINUX平臺下我有一個大於4G的檔案, 怎麼讀這些檔案的內容, ”的帖子,點進去看,才明白Linux下有如何處理大檔案的方式。linux支援大檔案的兩種方式:
1、gcc 加 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE
2、
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
建議兩種方式都加上。
gcc creat_file.c -o creat_file然後./creat_file data1得到:
---------- 1 root root 2147483647 2012-02-09 16:17 data1(錯誤的)
在編譯時加上gcc -D_FILE_OFFSET_BITS=64-D_LARG_FILE creat_file.c -o creat_file然後./creat_file data1得到::
---------- 1 root root 2147483648 2012-02-09 16:19 data1 (正確的)
同理,往1G的檔案中新增1G的資料也正確執行:
---------- 1 root root 1073741824 2012-02-09 16:57 data2(1G的檔案,追加前)
gcc -D_FILE_OFFSET_BITS=64 -D_LARG_FILE rdwrfile.c -o rdwrfile然後./rdwrfile data2(執行追加的程式後)得到:
---------- 1 root root 2147483648 2012-02-09 16:59 data2(2G的檔案,追加後)
在我的程式中只加了第一種方式,就可正確執行,得到正確的結果。只用第二種方式,不能解決問題。兩種方式都加上,可以得到正確結果。
相關文章
- LINUX下建立空檔案Linux
- 何在Mac系統上建立大檔案?教你在Mac系統建立大檔案的方法Mac
- Linux下修改檔案建立時間(修改檔案更改時間)Linux
- 在Linux中,如何建立、刪除和修改檔案?Linux
- 在linux下掛載ISO映象檔案Linux
- linux下使用split 來分割大檔案Linux
- Linux下用less瀏覽大檔案Linux
- 在Linux下建立強大的FTP搜尋引擎(轉)LinuxFTP
- Linux dd 在當前目錄建立檔案系統Linux
- 在Linux中,如何建立檔案系統的備份?Linux
- linux 之建立檔案命令Linux
- LINUX下查詢大檔案及大的資料夾Linux
- 在linux下使用Apache搭建檔案伺服器LinuxApache伺服器
- 在Linux下產生並除錯core檔案Linux除錯
- Linux伺服器下如何建立檔案防篡改規則Linux伺服器
- Linux 伺服器下如何建立檔案防篡改規則Linux伺服器
- Linux系統下建立檔案最常見的8種方法!Linux
- Linux系統下使用split命令分割大檔案.Linux
- linux教程:管理/var/spool/clientmqueue/下的大檔案LinuxclientMQ
- 在soalris 建立交換型檔案
- MAC OS X下建立iso檔案Mac
- 2.5.9 在資料庫建立期間支援大檔案表空間資料庫
- linux下core檔案Linux
- 在Linux中,如何建立、檢查和修復檔案系統?Linux
- Linux下NFS(網路檔案系統)的建立與配置方法LinuxNFS
- 在scrapy框架下建立爬蟲專案,建立爬蟲檔案,執行爬蟲檔案框架爬蟲
- 【Linux】建立linux開機啟動檔案Linux
- linux下解壓.gz檔案、.cpio檔案、zip檔案Linux
- linux中用touch命令建立新檔案Linux
- Linux查詢大檔案Linux
- 簡單介紹在 Linux 上建立和使用交換檔案的方法Linux
- HP-UNIX下建立檔案系統
- Linux下合併檔案Linux
- LINUX下的檔案加密Linux加密
- linux下主要檔案(轉)Linux
- 在linux下搭建NFS伺服器實現檔案共享LinuxNFS伺服器
- 在linux及unix系統下批次刪除oracle檔案LinuxOracle
- 在Linux系統環境下使用GFS檔案系統Linux