最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux 下C語言獲取文件大小

 更新時間:2017年07月05日 09:58:24   投稿:lqh  
這篇文章主要介紹了Linux 下C語言獲取文件大小的相關(guān)資料,需要的朋友可以參考下

Linux 下C語言獲取文件大小

C語言是一種比較底層的語言,有時在其他語言中很容易操作的事情,在c語言中就比較麻煩,例如獲取一個文件的大小。Java中File類有個length函數(shù),Python中os.path包中有個getsize函數(shù),C語言中卻沒有直接對應(yīng)的函數(shù)獲取文件大小。

       目前,網(wǎng)上有一種流傳很廣的方法,讀取文件到內(nèi)存,然后跳轉(zhuǎn)到文件末尾,查看跳轉(zhuǎn)的長度。代碼如下:

int file_size(char* filename) 
{ 
  FILE *fp=fopen(filename,"r"); 
  if(!fp) return -1; 
  fseek(fp,0L,SEEK_END); 
  int size=ftell(fp); 
  fclose(fp); 
   
  return size; 
} 

上述方法利用fseek移動一個文件的存取位置到文件的末尾,然后利用ftell獲得目前的文件訪問位置。這種方法可以認(rèn)為是一種間接的獲取方式。雖說可以獲得文件大小,但是有兩個缺點。首先,ftell的返回值為long,在不同環(huán)境下占用的字節(jié)數(shù)也不同,這就可能存在long是四個字節(jié)的情況。此時,獲取的文件大小就不能超過2G,否則就會出錯。

但是,上述缺點在大多數(shù)情況下都沒問題,超大文件還可以通過fsetpos和fgetpos獲取文件大小。最致命的缺陷就是它需要加載文件到內(nèi)存,然后跳轉(zhuǎn)到文件末尾,這個操作非常耗時!可能在讀取少量文件時體現(xiàn)不出,但是當(dāng)文件達到上萬個時,速度就會慢的要命,這種方法相當(dāng)于把所有的文件都讀到內(nèi)存中一遍!

如果可能,盡量避免采用上述間接的方式獲取文件大小。在Linux下,還有一種更簡單的方式,通過讀取文件信息獲得文件大小,速度也快很多。代碼如下:

#include <sys/stat.h> 
int file_size2(char* filename) 
{ 
  struct stat statbuf; 
  stat(filename,&statbuf); 
  int size=statbuf.st_size; 
 
  return size; 
} 

這種方式首先獲得相關(guān)文件的狀態(tài)信息,然后從狀態(tài)信息中讀取大小信息。由于沒有讀取文件的操作,所以操作速度非???。強烈建議大家在linux下使用這種方式。Windows平臺下肯定也有類似的函數(shù)讀取文件信息,不過本人常年不在windows下編程,所以在此不做介紹。

相關(guān)文章

  • shell結(jié)合expect寫的批量scp腳本工具

    shell結(jié)合expect寫的批量scp腳本工具

    expect用于自動化地執(zhí)行l(wèi)inux環(huán)境下的命令行交互任務(wù),例如scp、ssh之類需要用戶手動輸入密碼然后確認(rèn)的任務(wù)。有了這個工具,定義在scp過程中可能遇到的情況,然后編寫相應(yīng)的處理語句,就可以自動地完成scp操作了
    2013-02-02
  • Linux動態(tài)庫函數(shù)的詳解

    Linux動態(tài)庫函數(shù)的詳解

    這篇文章主要介紹了Linux動態(tài)庫函數(shù)的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分的內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • bash shell的條件語句詳解

    bash shell的條件語句詳解

    文章主要介紹了bash shell中的條件語句,包括if-then-fi、else、elif等結(jié)構(gòu)的使用規(guī)則,以及條件判斷符號(如-eq、-lt等)的正確使用方法,感興趣的朋友一起看看吧
    2024-12-12
  • Linux中10個有用的命令行補全例子

    Linux中10個有用的命令行補全例子

    這篇文章主要為大家詳細(xì)介紹了Linux中10個有用的命令行補全例子,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解

    Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解

    這篇文章主要介紹了Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解,雖然是基礎(chǔ)但是列舉的很詳細(xì),有感興趣的同學(xué)可以研究下
    2021-03-03
  • shell SNAT與DNAT的使用與區(qū)別

    shell SNAT與DNAT的使用與區(qū)別

    本文主要介紹了shell SNAT與DNAT的使用與區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • linux批量備份服務(wù)器配置文件和目錄的腳本

    linux批量備份服務(wù)器配置文件和目錄的腳本

    這篇文章主要介紹了linux下批量備份服務(wù)器配置文件和目錄的方法,需要的朋友可以參考下
    2013-08-08
  • Linux下實現(xiàn)SNMP一鍵安裝的Shell腳本

    Linux下實現(xiàn)SNMP一鍵安裝的Shell腳本

    這篇文章主要介紹了Linux下實現(xiàn)SNMP一鍵安裝的Shell腳本,非常實用,需要的朋友可以參考下
    2014-07-07
  • 詳解如何在Linux中創(chuàng)建和使用別名命令

    詳解如何在Linux中創(chuàng)建和使用別名命令

    Linux?用戶經(jīng)常需要反復(fù)使用一個命令,一遍又一遍地鍵入或復(fù)制相同的命令會降低您的工作效率并分散您對應(yīng)該做的事情的注意力,這個時候我們可以通過為最常用的命令創(chuàng)建別名來節(jié)省一些時間,接下來將給大家介紹一下如何在Linux中創(chuàng)建和使用別名命令
    2023-07-07
  • Linux awk將文件某列按照逗號分隔的例子

    Linux awk將文件某列按照逗號分隔的例子

    今天小編就為大家分享一篇關(guān)于Linux awk將文件某列按照逗號分隔的例子,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論

竹溪县| 栾城县| 兴海县| 舒城县| 潞城市| 普安县| 绵阳市| 东方市| 鹤山市| 西华县| 莆田市| 二连浩特市| 图们市| 锦州市| 房产| 英超| 四子王旗| 上饶市| 张家港市| 临颍县| 英超| 兴化市| 项城市| 嘉定区| 邹平县| 阜新市| 胶南市| 石城县| 合作市| 东平县| 许昌市| 咸阳市| 嵊州市| 三河市| 安阳市| 禹州市| 山东省| 杭州市| 高清| 黑龙江省| 张北县|