在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-08-31 12:49 ? 次閱讀

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

#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

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

img

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

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11304

    瀏覽量

    209524
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136842
  • 文件
    +關注

    關注

    1

    文章

    566

    瀏覽量

    24746
收藏 人收藏

    評論

    相關推薦

    C語言-文件編程

    這篇文章介紹C語言文件編程函數,案例代碼是在Linux環境下運行測試的分別介紹了C語言標準庫的
    的頭像 發表于 09-09 11:33 ?2015次閱讀

    Linux操作系統-C語言編程入門-pdf

    Linux操作系統-C語言編程入門介紹在LINUX 下進行C 語言編程所需要的基礎知識.
    發表于 12-08 09:55 ?193次下載
    <b class='flag-5'>Linux</b>操作系統-<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程入門-pdf

    linuxc語言編程pdf

    linuxc語言編程內容為::基礎知識,進程介紹,文件操作,時間概念,信號處理,消息管理,線程操作,網絡編程,Linux
    發表于 12-08 10:00 ?0次下載

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

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

    C語言教程之獲取當前日期與時間

    C語言教程之獲取當前日期與時間,很好的C語言資料,快來學習吧。
    發表于 04-25 16:09 ?0次下載

    C語言教程之獲取CMOS密碼

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

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

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

    C語言教程之獲取Caps Lock鍵狀態

    C語言教程之獲取Caps Lock鍵狀態,很好的C語言資料,快來學習吧。
    發表于 04-25 17:07 ?0次下載

    C語言教程之獲取環境變量

    C語言教程之獲取環境變量,很好的C語言資料,快來學習吧。
    發表于 04-25 17:07 ?0次下載

    linux中編譯c語言方法

    以上就是linux中如何編譯c語言的詳細內容。
    發表于 06-09 08:58 ?1436次閱讀

    LinuxC語言編程入門教程詳細說明

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

    C語言_Linux基本命令與C語言基礎

    這篇文章介紹在Linux環境下學習C語言搭建基本的環境過程,了解基礎的幾個命令使用方法,了解Linux下用戶權限配置,標準main函數傳參方
    的頭像 發表于 08-14 09:45 ?1152次閱讀

    深入探索Linux中的C語言

    Linux 中的基礎頭文件C 語言標準以及可移植操作系統(POSIX)標準,C 語言是和
    的頭像 發表于 03-14 16:48 ?1934次閱讀

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

    C語言中沒有直接獲取文件長度的接口,但是我們可以使用標準庫提供的函數來間接的獲取文件長度。這里提
    的頭像 發表于 10-10 16:15 ?1363次閱讀
    <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語言代碼

    是處理器可以直接執行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件獲取一些有用的信息或者對程
    的頭像 發表于 09-02 10:37 ?2307次閱讀
    主站蜘蛛池模板: 成人午夜免费视频 | 成人爽a毛片在线视频网站 成人窝窝午夜看片 | 717影院理论午夜伦不卡久久 | 亚洲一区二区中文字5566 | 午夜欧美性欧美 | brazzersvideosexhd欧美高清 | 狠狠色欧美亚洲狠狠色www | 一区二区免费播放 | 久久国产免费观看精品 | 男人性天堂 | 免费观看一级特黄三大片视频 | 一级欧美日韩 | 人人骚 | 九九热在线精品视频 | 免费啪视频 | 久久婷婷五综合一区二区 | 一级做a爰片久久毛片美女图片 | 色偷偷综合| 天天视频免费入口 | 一级欧美在线的视频 | 国产三级香港三级人妇 | 国久久| 国产黄色视屏 | 国精视频一区二区视频 | 校园 春色 欧美 另类 小说 | 欧美精彩狠狠色丁香婷婷 | 国产亚洲第一伦理第一区 | 亚洲欧美在线一区二区 | 日本最好的免费影院 | 丁香五香天堂网卡 | 免费一级片视频 | 成人在线色视频 | 在线观看a网站 | 天天综合网天天做天天受 | 84pao强力永久免费高清 | 九九热在线精品 | 免费一级毛片清高播放 | www.色五月 | 色wwwww | 午夜cao| 欧美二级黄色片 |