Linux系统编程:标准IO操作--索引对应路径下的文件

简介: #include #include #include #include #include #include #include #include #define MAX_FILE_NUM 128#define MAX_PATH_LEN 128char file_path...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> 
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#define MAX_FILE_NUM 128
#define MAX_PATH_LEN				128
char file_path[MAX_FILE_NUM][MAX_PATH_LEN];
char *pFilePath[MAX_FILE_NUM];
int total_file_num = 0;
//排序文件 
void SortFilePath(void)
{
	char *pTemp;
	int i, j, k;
	for (i=0; i<MAX_FILE_NUM && file_path[i]; i++)
		pFilePath[i] = file_path[i];
			
	for (i=0; i<total_file_num-1; i++)
	{
		if (pFilePath[i] == 0)
			break;
		k = i;
		for (j=i+1; j<total_file_num; j++)
			if (strcmp(pFilePath[k], pFilePath[j]) > 0)
				k = j;
		if (k != i)
		{
			pTemp = pFilePath[i];
			pFilePath[i] = pFilePath[k];
			pFilePath[k] = pTemp;
		}
	}
}
//判断文件路径是否存在 
int is_path_exist(const char *root)
{
    DIR *dir;

    dir = opendir(root);
    if (dir == NULL){
    	printf("error!\n");
        return -1;
	}
	closedir(dir);
	
	return 0;
}
//返回该目录下文件的个数 
int get_file_path(const char *root)
{
	int count, status, len;
    DIR *dir;
    struct dirent *ptr;
    dir = opendir(root);
    if (dir == NULL)
	{
        printf("fail to open dir:%s\n", root);
        return -1;
    }
	count=0;
	chdir(root);
    while ((ptr = readdir(dir)) != NULL)
	{
		if (strcmp(ptr->d_name,".") ==0 || strcmp(ptr->d_name,"..")==0) //后面还可以加一个选项,排除文件夹
            continue;
		strcpy(file_path[count], ptr->d_name);
		printf("mount: %s  success!\n",ptr->d_name);
		count++;
		if (count == MAX_FILE_NUM)
			break;
    }
    closedir(dir);
	return count;
}


int main(void)
{
	char *name = "C:/Users/se0803/Desktop/test";
	struct dirent *ptr;
	int ret = is_path_exist(name);
	if(0 == ret)
	  printf("path exist!\n");	
	int total_file_num = get_file_path(name);
	printf("total_file_num:%d\n",total_file_num);
	SortFilePath();
	return 0 ;
}

运行结果:


目录
相关文章
|
4月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
350 3
Linux系统禁用swap
|
4月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
702 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
457 0
Linux系统初始化脚本
|
5月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
326 18
|
4月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
398 1
|
4月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1092 1
|
5月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1723 10
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
3月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
210 1
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用