Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取C语言源代码

#include <stdio.h>
#include <sys/statfs.h>
#include <string.h>
#include <dirent.h>
#include <stdbool.h> 
#include <sys/stat.h>

/***********************************************************
*原型:bool is_dir(const char *path)
*功能:判断是否为目录
***********************************************************/
bool is_dir(const char *path)
{
    struct stat statbuf;
    if(lstat(path, &statbuf) ==0)//lstat返回文件的信息,文件信息存放在stat结构中
    {
        return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR宏,判断文件类型是否为目录
    }
    return false;
}

/***********************************************************
*原型:bool is_special_dir(const char *path)
*功能:判断是否是特殊目录
***********************************************************/
bool is_special_dir(const char *path)
{
    return strcmp(path, ".") == 0 || strcmp(path, "..") == 0;
}

/***********************************************************
*原型:bool is_file(const char *path)
*功能:判断是否为常规文件
***********************************************************/
bool is_file(const char *path)
{
    struct stat statbuf;
    if(lstat(path, &statbuf) ==0)
        return S_ISREG(statbuf.st_mode) != 0;//判断文件是否为常规文件
    return false;
}

/***********************************************************
*原型:void get_file_path(const char *path, const char *file_name,  char *file_path)
*功能:生成完整的文件路径
***********************************************************/
void get_file_path(const char *path, const char *file_name,  char *file_path)
{
    strcpy(file_path, path);
    if(file_path[strlen(path) - 1] != '/')
        strcat(file_path, "/");
    strcat(file_path, file_name);
	
}

/***********************************************************
*原型:int file_size(char* filename) 
*功能:获取文件的大小,返回文件的字节大小
***********************************************************/
int file_size(char* filename) 
{ 
	int size = 0;
	struct stat sss;
	stat(filename,&sss); 
	size = sss.st_size; 
	return size; 
} 

/***********************************************************
*原型:void FileFilderSize(const char *path,int *cap)
*功能:获取文件夹的大小,返回文件夹的字节大小
***********************************************************/
void FileFilderSize(const char *path,int *cap)
{
	int sum = 0;
	char aaa[200] = {0};
	DIR * dir;
	struct dirent * dir_info;
    char file_path[PATH_MAX];
    if(is_file(path))
    {
        remove(path);
        return;
    }
    if(is_dir(path))
    {
        if((dir = opendir(path)) == NULL)
            return;
        while((dir_info = readdir(dir)) != NULL)
        {
            get_file_path(path, dir_info->d_name, file_path);
            if(is_special_dir(dir_info->d_name))
			{
				continue;
			}
                
			sprintf(aaa,"%s/%s",path,dir_info->d_name);
        	sum += file_size(aaa);
			printf("d_name : %s\n", dir_info->d_name);
			
        }
		closedir(dir);
    }
	*cap = sum;
}
/***********************************************************
*原型:int Udisk_Capacity(char *chardir,int *total,int *free)
*功能:获取U盘(磁盘)空间大小,单位为KB
***********************************************************/
int Udisk_Capacity(char *chardir,int *total,int *free)
{
	struct statfs s;
	
	memset(&s, 0, sizeof(struct statfs));
	if( 0 != statfs(chardir, &s) )
	{
		return -1;
	}

	if(s.f_bsize >= 1024)
	{
		printf("\n if(s.f_bsize >= 1024)\n");
		*total = (int)(  (s.f_bsize / 1024 ) * s.f_blocks );
		*free = (int) ( ( s.f_bsize / 1024 ) * s.f_bavail );
	}
	else
	{
		printf("\n if(s.f_bsize < 1024)  else\n");
		*total = (int)(  (s.f_blocks / 1024 ) * s.f_bsize );
		*free = (int) ( ( s.f_bavail / 1024 ) * s.f_bsize );
	}
}


int main(void)
{
	int a,b,c;
	Udisk_Capacity("/home/xxx/Desktop",&a,&b);
	printf("Disk total space =%d KB %d MB %d GB\n",a,a>>10,a>>20);
	printf("Disk free space=%d KB %d MB %d GB\n",b,b>>10,b>>20);
	FileFilderSize("/home/xxx/Desktop/testfolder/",&c);
	
	printf("FileFolder space = %d bytes %d KB %d MB\n",c,c/1000,c/1000000);
}

测试结果

首先测试一下U盘或者磁盘的大小:
在这里插入图片描述
在选择一个文件夹查看一下文件夹的总大小:
在这里插入图片描述
运行程序后查看结果如下:
在这里插入图片描述

在这里插入图片描述

银河麒麟V10安装U制作全攻略:从原理到实战避坑指南 在操作系统安装与部署领域,引导方式和介质制作是基础且关键的技术环节。其核心原理涉及引导加载程序(如GRUB2)、分区表(MBR/GPT)与文件系统的协同工作,确保计算机能够正确识别并启动安装环境。这一过程的技术价值在于实现跨硬件平台和固件(UEFI/传统BIOS)的广泛兼容性,是系统运维、国产化替代和开发测试中的常见需求。尤其是在面对像银河麒麟V10这类基于Linux内核的国产操作系统时,其镜像结构与传统Windows ISO存在差异,通用的“刻录”方法往往失效。因此,掌握底层“写”技术,并选用如Rufu 阅读详情

相关推荐

OpenClaw:跨平台本地AI工作流编排器,U即运行

AI本地化部署正从‘能跑起来’迈向‘开箱即用’新阶段。其核心在于绕过传统容器环境依赖,通过轻量级服务管理、动态路径重定向与桌面应用封装,实现模型服务、文档解析、向量检索等能力的低门槛集成。OpenClaw作为典型代表,以Rust+Tauri构建跨平台底座,支持Windows/Mac/U免安装启动,将AI工作流配置收敛至可视化界面,显著降低Python环境、Docker权限、ARM/x86兼容性等工程门槛。适用于企业知识库离线问答、教育机房AI教学、律所合同分析等强隐私、弱联网场景,让非专业用户也能快速构建

weixin_30905981的博客 363

linux 文件

举个例子,比如第一次打开文件时分配的值fd = 0,如果该文件被关闭,下次新打开一个文件时,fd依然为0,但如果之前打开的文件没有被close掉,则下次新打开一个文件时,fd递增为1,一直递增到系统设定的同时打开文件的最大值为止,这个最大值可以使用 ulimit -n 查看,一般为1024。打开当前目录下的text.txt文件,如果不存在则创建,首先写入一个字符串,然后关闭文件,再重新打开读取文件中的内容并打印。每一个rwx都对应一个。这些打开方式可以使用。

悟心的专栏 1013

Ubuntu下C语言开发环境搭建:从系统安装到项目实战

C语言作为系统编程和嵌入式开发的核心,其学习效率高度依赖于开发环境。在Linux操作系统上进行C语言开发,能够直接接触GCC编译器、GDB调试器等底层工具链,有助于深入理解程序编译、链接和执行的原理。这种贴近硬件的开发方式,对于掌握内存管理、指针操作等核心概念具有不可替代的价值。无论是操作系统开发、驱动编写,还是高性能服务器编程,基于Linux的C语言环境都是行业标准实践。本文以Ubuntu系统为例,详细演示如何从零开始配置一个完整的C语言开发环境,涵盖系统安装、GCC编译器套件配置、VSCode编辑器集成

weixin_30920853的博客 350

Linux下C语言实现文件写操作(包含在应用层与驱动层)

前言: 配合团队内的小伙伴做数据转换,他需要我将保存在.txt文件内的字符数据(十六进制)转换为二进制,也需要我将.Bin文件内的二进制数据转换为字符数据(十六进制)。 下面所贴的程序有很大的优化空间,每次读取数据的量太小,需要频繁IO操作,导致运行速度变得很慢。 1. 数据转换程序的原始模板(C语言文件操作): #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { }

weixin_42842270的博客 2688

linux下c语言文件操作,linux下的系统级c语言文件写操作

最近初次接触Linux这么高端的东西,有种进城的感觉。进了linux,发现城里人说话做事的方式都很不一样。个人感觉,初次接触linux主要的痛点在于命令行交互的方式,这就要求我接受城里人的思维,which is 遇到一个软件,先--help,因为城里人不会提供一个图形界面,把所有功能按钮展示在我面前。再就是文件组织形式的不同,linux文件组织方式是用户目录式。进入linux我首先学了关于c语言...

weixin_39940425的博客 1865

linux udev 检测u的插入和拔出,[转]udev实现原理(含检测U拔插例子)

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/usbdev2.2_ep00add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0add@/class/scsi_host/host2add@/devices/pci...

weixin_39604139的博客 784

打造便携式AI开发环境:将OpenClaw部署到U实现跨平台即插即用

本地AI模型部署与管理是当前AI工程化实践中的关键环节,它涉及将训练好的模型集成到生产环境,并提供稳定的服务接口。其核心原理在于通过环境隔离与依赖管理,确保模型在不同系统上的一致性与可复现性。这项技术的价值在于能显著降低AI应用落地的门槛,提升开发与部署效率。典型的应用场景包括多设备开发、技术演示、教育实验以及在受限环境下的快速原型验证。本文聚焦于利用开源工具OpenClaw,结合虚拟环境技术,构建一个可置于U的便携式AI网关方案。该方案通过将Python虚拟环境、项目代码与配置整体打包,实现了开发环境与

weixin_30315905的博客 409

写给三弟的 C语言编程 快速入门

三弟,你要的C语言快速入门,已整理好 请接收。

码刀攻城 3799

跨平台访问BitLocker加密磁盘:原理、方案与Linux/macOS实战

磁盘加密是数据安全领域的核心基础技术,通过对存储设备进行全加密,确保即使物理介质丢失,数据也不会泄露。其原理通常采用分层密钥体系,如BitLocker使用的全卷加密密钥(FVEK)和卷主密钥(VMK)结构,在提供强安全性的同时,也带来了跨平台访问的挑战。这项技术的价值在于为混合办公和多设备协作环境下的敏感数据提供了基础保护。然而,当加密硬需要在Windows、macOS、Linux等不同操作系统间流动时,就产生了“跨平台BitLocker数据访问”这一具体需求。针对此场景,主流方案包括使用官方恢复密钥进

weixin_34192816的博客 337

U-Boot开发入门教程|嵌入式工程实战手册(系列一)

摘要 本文结合实际嵌入式项目开发经验,从零梳理 U-Boot 引导程序完整开发体系。区别于官方文档生硬的说明方式,本文站在工程落地角度,讲解源码目录拆解、交叉编译实操、分层架构设计、完整启动流程、调试命令实战以及和 Linux 内核对接细节,同时补充大量项目调试踩坑经验,适配 ARM 系列嵌入式开发板,适合嵌入式软件工程师入门与项目查阅。

u010020248的博客 557

Linux核心目录深度解析:/etc、/dev、/usr、/var、/proc 实战指南

Linux系统管理与运维中,理解核心目录结构是掌握系统运作原理的基础。Linux遵循“一切皆文件”的哲学,通过特定的目录层级组织系统资源、配置、数据和运行时信息。其核心价值在于为系统管理员和开发者提供了清晰、标准化的资源管理框架,使得软件安装、配置管理、故障排查和性能监控变得有章可循。这一设计广泛应用于服务器运维、软件开发环境搭建及嵌入式系统等领域。本文聚焦于Linux系统中五个最核心且最常打交道的目录:/etc、/dev、/usr、/var和/proc。其中,/etc目录作为系统的“总控制台”,集中管理

weixin_33850890的博客 350

E900V21C电视盒子刷Armbian:打造低功耗Linux服务器完整指南

ARM架构作为嵌入式系统和低功耗设备的核心,通过精简指令集和高效能设计,为物联网和边缘计算提供了硬件基础。其工作原理在于将Linux等操作系统移植到非x86平台,实现丰富的软件生态在资源受限设备上的运行,这带来了显著的技术价值:低成本、低功耗和高度可定制化。在智能家居、轻量级服务器和开发学习等应用场景中,基于ARM的设备如电视盒子经过改造后,能够变身为实用的微型服务器。本文以晶晨S905L芯片的E900V21C为例,详细介绍了通过刷入Armbian系统实现这一转变的完整流程,涵盖了从线刷底包、DTB文件适配

axfcjwkbi259888707的博客 454

Kali Linux安装全攻略:虚拟机、双系统与U持久化实战指南

从操作系统到安全测试平台,Kali Linux作为基于Debian的专用发行版,集成了数百款渗透测试与网络审计工具。理解其安装原理是使用它的第一步:虚拟机方案隔离性强且支持快照回滚,适合新手试错;双系统安装则能发挥物理机性能,满足无线网卡监听等外设直连需求;而U持久化系统通过独立存储分区保存配置与文件,打造可随身携带的测试环境。安装过程涉及镜像选择、分区规划、引导配置、驱动加载等关键环节,掌握这些底层机制不仅有助于完成Kali的部署,更能提升对Linux系统架构的整体认知。本文以工程化视角梳理三种主流安装

weixin_32612263的博客 192

不用WinPE制作启动U:ISO镜像直写原理与实操

ISO镜像并非普通压缩包,而是遵循ISO 9660标准的光扇区快照,其启动本质依赖El Torito可启动规范与固件对CD-ROM设备的识别。绕过WinPE等中间层,采用Rufus DD模式或Linux/macOS原生命令dd进行物理扇区级写入,可实现ISO到U的无损平移,确保引导链纯净、签名可验证、Secure Boot兼容。该方法规避了文件系统解析、驱动适配和引导劫持风险,广泛适用于Windows安装Linux Live系统、服务器部署(如ESXi/Proxmox)及嵌入式设备烧录等场景,是企业

weixin_33393017的博客 188

终极磁盘清理指南:Czkawka跨平台重复文件查找工具深度解析

你是否曾因磁盘空间不足而烦恼?是否发现电脑中有大量重复文件却无从下手?Czkawka(发音:tch-kav-ka,波兰语意为"打嗝")是一款由Rust编写的开源跨平台磁盘清理工具,它不仅能帮你快速找到并清理重复文件,还能识别相似图片、优化视频文件、清理临时文件等。这款免费工具支持Windows、macOS、Linux甚至Android系统,通过多线程技术和高效算法实现秒级扫描,让磁盘空间管理变得简

gitblog_00726的博客 1105

Windows系统重装全攻略:从备份到驱动安装的完整流程

操作系统重装是计算机维护中的核心技能,其本质是通过全新系统文件替换原有系统,以解决性能下降、文件损坏或硬件兼容性问题。这一过程涉及引导原理、磁盘分区和驱动程序加载等关键技术。掌握系统重装不仅能恢复设备最佳状态,还能为后续软件部署提供纯净环境,尤其适用于开发环境搭建、老旧设备焕新等场景。在实践层面,使用官方媒体创建工具制作启动U、正确设置BIOS/UEFI启动顺序以及谨慎操作磁盘分区是成功的关键。本文以Windows系统为例,详细解析了从数据备份、启动制作到驱动安装与故障排查的完整操作流程,其中涉及win

weixin_30691871的博客 302

云计算运维学习 day4--Linux软件包与磁盘管理

摘要:本文系统介绍了Linux软件包管理(源码、RPM、YUM)、磁盘分区/格式化/挂载/逻辑卷管理,并提供了一个基于LAMP架构搭建论坛的综合实践项目。

2302_80987538的博客 242

Linux系统运维常用命令集锦

1、文件目录操作命令(18个) ls 全拼为list,功能是列出目录的内容及其内容属性信息。 主要参数: -a:显示隐藏文件 -l:是以更详细的列表形式显示-S: 以下命令参数待不全: cd 全拼为change directory,功能是从当前工作目录切换到指定的工作目录。 cp 全拼为copy,功能为复制文件目录。 find 查找,用于查找目录目录文件。 mkdir 全拼为make di...

企业实战系列集 ●●● https://ximenjianxue.blog.csdn.net 3万+
上一篇: 麦克风阵列声源定位四通道麦克风数据库及TDOA双曲交汇定位算法实验
下一篇: Linux字符设备驱动——ZYNQ PS_LED(MIO9)驱动开发
SlaveOpen
博客等级 码龄5年 3602粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值