欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux 下C語(yǔ)言獲取文件大小

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

Linux 下C語(yǔ)言獲取文件大小

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

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

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移動(dòng)一個(gè)文件的存取位置到文件的末尾,然后利用ftell獲得目前的文件訪問(wèn)位置。這種方法可以認(rèn)為是一種間接的獲取方式。雖說(shuō)可以獲得文件大小,但是有兩個(gè)缺點(diǎn)。首先,ftell的返回值為long,在不同環(huán)境下占用的字節(jié)數(shù)也不同,這就可能存在long是四個(gè)字節(jié)的情況。此時(shí),獲取的文件大小就不能超過(guò)2G,否則就會(huì)出錯(cuò)。

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

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

#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)信息中讀取大小信息。由于沒(méi)有讀取文件的操作,所以操作速度非??臁?qiáng)烈建議大家在linux下使用這種方式。Windows平臺(tái)下肯定也有類似的函數(shù)讀取文件信息,不過(guò)本人常年不在windows下編程,所以在此不做介紹。

相關(guān)文章

  • shell sed命令的具體使用

    shell sed命令的具體使用

    本文主要介紹了shell sed命令的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Linux中修改文件權(quán)限chmod命令詳解

    Linux中修改文件權(quán)限chmod命令詳解

    在Linux系統(tǒng)中,chmod命令用于更改文件或目錄的權(quán)限,它可以授予或撤銷對(duì)文件的讀取、寫入和執(zhí)行權(quán)限,本文給大家詳細(xì)的介紹了Linux修改文件權(quán)限chmod命令用法,需要的朋友可以參考下
    2023-08-08
  • linux幾個(gè)沒(méi)用但是有趣的命令(收藏)

    linux幾個(gè)沒(méi)用但是有趣的命令(收藏)

    今天給大家分享一些linux幾個(gè)沒(méi)用但是有趣的命令,非常不錯(cuò),喜歡的朋友快快收藏吧
    2021-11-11
  • Linux下實(shí)現(xiàn)SSH免密碼登錄和實(shí)現(xiàn)秘鑰的管理、分發(fā)、部署SHELL腳本分享

    Linux下實(shí)現(xiàn)SSH免密碼登錄和實(shí)現(xiàn)秘鑰的管理、分發(fā)、部署SHELL腳本分享

    這篇文章主要介紹了Linux下實(shí)現(xiàn)SSH免密碼登錄和實(shí)現(xiàn)秘鑰的管理、分發(fā)、部署SHELL腳本分享,本文先是講解了SSH免密碼登錄的創(chuàng)建過(guò)程,然后給出了可以分發(fā)、部署密鑰的Shell腳本,需要的朋友可以參考下
    2014-09-09
  • 淺析Linux tar打包命令

    淺析Linux tar打包命令

    這篇文章主要介紹了Linux tar打包命令,本文給大家?guī)?lái)八個(gè)范例,每個(gè)范例都給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • linux shell 管道命令(pipe)使用及與shell重定向區(qū)別

    linux shell 管道命令(pipe)使用及與shell重定向區(qū)別

    這篇文章主要介紹了linux shell 管道命令(pipe)使用及與shell重定向區(qū)別,需要的朋友可以參考下
    2015-10-10
  • shell腳本自動(dòng)安裝jdk的方法示例

    shell腳本自動(dòng)安裝jdk的方法示例

    這篇文章主要介紹了shell腳本自動(dòng)安裝jdk的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • shell函數(shù)內(nèi)調(diào)用另一個(gè)函數(shù)(不帶返回值和帶返回值)

    shell函數(shù)內(nèi)調(diào)用另一個(gè)函數(shù)(不帶返回值和帶返回值)

    本文主要介紹了shell函數(shù)內(nèi)調(diào)用另一個(gè)函數(shù)(不帶返回值和帶返回值),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Linux之時(shí)鐘中斷詳解

    Linux之時(shí)鐘中斷詳解

    這篇文章主要介紹了Linux之時(shí)鐘中斷詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • shell腳本function傳參的具體使用

    shell腳本function傳參的具體使用

    本文主要介紹了shell腳本function傳參的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論