0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【Linux + C語言】C語言獲取文件大小的方法都在這

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-08-31 12:49 ? 次閱讀

筆者在日常項(xiàng)目中經(jīng)常需要使用C語言求一個(gè)文件的大小,特整理了一些常用的方法,通過測試代碼的形式展示出來,話不多說,直接上代碼:

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define TEST_FILE	"./IMG_3458.JPG"

// call stat() function
static int get_file_size_by_stat(const char *file)
{
	int ret;
	struct stat file_info;
	
	printf("enter %s() >>>\n", __func__);
	ret = stat(file, &file_info);
	
	return (!ret) ? file_info.st_size : -1;
}

// call lstat() function
static int get_file_size_by_lstat(const char *file)
{
	int ret;
	struct stat file_info;
	
	printf("enter %s() >>>\n", __func__);
	ret = lstat(file, &file_info);
	
	return (!ret) ? file_info.st_size : -1;
}

// call fstat() function
static int get_file_size_by_fstat(const char *file)
{
	int ret;
	int fd;
	struct stat file_info;
	
	printf("enter %s() >>>\n", __func__);
	fd = open(file, O_RDONLY);
	if (fd < 0) {
		ret = -1;
		perror("open error");
		goto exit_entry;
	}
	
	ret = fstat(fd, &file_info);
	
exit_entry:
	if (fd >= 0) {
		close(fd);
	}
	return (!ret) ? file_info.st_size : -1;
}

// call lseek() function
static int get_file_size_by_lseek(const char *file)
{
	int ret;
	int fd;
	
	printf("enter %s() >>>\n", __func__);
	fd = open(file, O_RDONLY);
	if (fd < 0) {
		ret = -1;
		perror("open error");
		goto exit_entry;
	}
	
	ret = lseek(fd, 0, SEEK_END);
	
exit_entry:
	if (fd >= 0) {
		close(fd);
	}
	return ret;
}

// call fseek() and ftell() function
static int get_file_size_by_fseek_and_ftell(const char *file)
{
	int ret;
	FILE *fp;
	
	printf("enter %s() >>>\n", __func__);
	fp = fopen(file, "r");
	if (!fp) {
		ret = -1;
		perror("fopen error");
		goto exit_entry;
	}
	
	ret = fseek(fp, 0, SEEK_END);
	if (ret < 0) {
		ret = -1;
		perror("fseek error");
		goto exit_entry;	
	}
	
	ret = ftell(fp);
	
exit_entry:
	if (fp) {
		fclose(fp);
	}
	return ret;
}

static int shell_cmd_excute(const char *cmd, char *result, int size)
{
	int ret;
	FILE *fp;
	
	fp = popen(cmd, "r");
	if (!fp) {
		ret = -1;
		perror("popen error");
		goto exit_entry;
	}
	
	ret = fread(result, 1, size, fp);
	if (ret < 0) {
		ret = -1;
		perror("fseek error");
		goto exit_entry;	
	}
	
	ret = 0;
exit_entry:
	if (fp) {
		pclose(fp);
	}
	return ret;
}

// call shell cmd
static int get_file_size_by_shell_cmd(const char *file)
{
	int ret;
	char cmd[128];
	char result[16];
	
	printf("enter %s() >>>\n", __func__);
	snprintf(cmd, sizeof(cmd), "ls -al %s | awk '{print $5}'", file);
	printf("shell cmd: %s\n", cmd);
	
	ret = shell_cmd_excute(cmd, result, sizeof(result));
	if (!ret && strlen(result)) {
		ret = atoi(result);
	}
	
	return ret;
}

int main(int argc, const char *argv[])
{
	int file_size;
	
	printf("enter %s() >>>\n", __func__);
	
	file_size = get_file_size_by_stat(TEST_FILE);
	printf("file_size=%d\n\n\n", file_size);
	
	file_size = get_file_size_by_lstat(TEST_FILE);
	printf("file_size=%d\n\n\n", file_size);
	
	file_size = get_file_size_by_fstat(TEST_FILE);
	printf("file_size=%d\n\n\n", file_size);
	
	file_size = get_file_size_by_lseek(TEST_FILE);
	printf("file_size=%d\n\n\n", file_size);
	
	file_size = get_file_size_by_fseek_and_ftell(TEST_FILE);
	printf("file_size=%d\n\n\n", file_size);	
	
	file_size = get_file_size_by_shell_cmd(TEST_FILE);
	printf("file_size=%d\n\n\n", file_size);
	
	return 0;
}

測試記錄如下:

被測試文件,在windows下查看大小為:

img

如上測試代碼,編譯出來,運(yùn)行結(jié)果如下所示,測試證明,所有的獲取方法均是有效的。

img

好了,本次使用C語言獲取文件大小的方法就介紹到這里,如果你有更加方便、快捷、高效的方法,也可以在評(píng)論席告知,感激不盡。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208721
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135878
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    561

    瀏覽量

    24671
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言-文件編程

    這篇文章介紹C語言文件編程函數(shù),案例代碼是在Linux環(huán)境下運(yùn)行測試的分別介紹了C語言標(biāo)準(zhǔn)庫的
    的頭像 發(fā)表于 09-09 11:33 ?1976次閱讀

    Linux操作系統(tǒng)-C語言編程入門-pdf

    Linux操作系統(tǒng)-C語言編程入門介紹在LINUX 下進(jìn)行C 語言編程所需要的基礎(chǔ)知識(shí).
    發(fā)表于 12-08 09:55 ?193次下載
    <b class='flag-5'>Linux</b>操作系統(tǒng)-<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程入門-pdf

    linuxc語言編程pdf

    linuxc語言編程內(nèi)容為::基礎(chǔ)知識(shí),進(jìn)程介紹,文件操作,時(shí)間概念,信號(hào)處理,消息管理,線程操作,網(wǎng)絡(luò)編程,Linux
    發(fā)表于 12-08 10:00 ?0次下載

    C語言和匯編語言混合編程方法C語言中斷處理方法

    C語言和匯編語言混合編程方法C語言中斷處理方法,n
    發(fā)表于 01-06 14:36 ?36次下載

    C語言教程之獲取當(dāng)前日期與時(shí)間

    C語言教程之獲取當(dāng)前日期與時(shí)間,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 16:09 ?0次下載

    C語言教程之獲取CMOS密碼

    C語言教程之獲取CMOS密碼,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 16:49 ?0次下載

    C語言教程之獲取Ctrl+Break消息

    C語言教程之獲取Ctrl+Break消息,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 17:07 ?0次下載

    C語言教程之獲取Caps Lock鍵狀態(tài)

    C語言教程之獲取Caps Lock鍵狀態(tài),很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 17:07 ?0次下載

    C語言教程之獲取環(huán)境變量

    C語言教程之獲取環(huán)境變量,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 17:07 ?0次下載

    linux中編譯c語言方法

    以上就是linux中如何編譯c語言的詳細(xì)內(nèi)容。
    發(fā)表于 06-09 08:58 ?1413次閱讀

    LinuxC語言編程入門教程詳細(xì)說明

    本文是LinuxC 語言編程入門教程。主要介紹了Linux 的發(fā)展與特點(diǎn)、C語言的基礎(chǔ)知識(shí)、
    發(fā)表于 08-25 18:05 ?39次下載
    <b class='flag-5'>Linux</b>下<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程入門教程詳細(xì)說明

    C語言_Linux基本命令與C語言基礎(chǔ)

    這篇文章介紹在Linux環(huán)境下學(xué)習(xí)C語言搭建基本的環(huán)境過程,了解基礎(chǔ)的幾個(gè)命令使用方法,了解Linux下用戶權(quán)限配置,標(biāo)準(zhǔn)main函數(shù)傳參方
    的頭像 發(fā)表于 08-14 09:45 ?1115次閱讀

    深入探索Linux中的C語言

    Linux 中的基礎(chǔ)頭文件、C 語言標(biāo)準(zhǔn)以及可移植操作系統(tǒng)(POSIX)標(biāo)準(zhǔn),C 語言是和
    的頭像 發(fā)表于 03-14 16:48 ?1594次閱讀

    C語言獲取文件長度的兩種方法

    C語言中沒有直接獲取文件長度的接口,但是我們可以使用標(biāo)準(zhǔn)庫提供的函數(shù)來間接的獲取文件長度。這里提
    的頭像 發(fā)表于 10-10 16:15 ?1285次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>獲取</b><b class='flag-5'>文件</b>長度的兩種<b class='flag-5'>方法</b>

    hex文件如何查看原c語言代碼

    是處理器可以直接執(zhí)行的指令,而 C 語言代碼則是人類可讀的高級(jí)編程語言代碼。 然而,如果你想要從 .hex 文件獲取一些有用的信息或者對程
    的頭像 發(fā)表于 09-02 10:37 ?1203次閱讀