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 ;
}

运行结果:


目录
相关文章
|
9月前
|
安全 算法 Ubuntu
Linux(openssl)环境:编程控制让证书自签的技巧。
总结:在Linux环境中,OpenSSL是一个非常实用的工具,可以帮助我们轻松地生成自签名证书。通过上述三个简单步骤,即可为内部网络、测试环境或开发环境创建自签名证书。但在公共访问场景下,建议购买经过权威认证机构签发的证书,以避免安全警告。
425 13
|
8月前
|
Linux C语言 网络架构
Linux的基础IO内容补充-FILE
而当我们将运行结果重定向到log.txt文件时,数据的刷新策略就变为了全缓冲,此时我们使用printf和fwrite函数打印的数据都打印到了C语言自带的缓冲区当中,之后当我们使用fork函数创建子进程时,由于进程间具有独立性,而之后当父进程或是子进程对要刷新缓冲区内容时,本质就是对父子进程共享的数据进行了修改,此时就需要对数据进行写时拷贝,至此缓冲区当中的数据就变成了两份,一份父进程的,一份子进程的,所以重定向到log.txt文件当中printf和fwrite函数打印的数据就有两份。此时我们就可以知道,
141 0
|
8月前
|
存储 Linux Shell
Linux的基础IO
那么,这里我们温习一下操作系统的概念我们在Linux平台下运行C代码时,C库函数就是对Linux系统调用接口进行的封装,在Windows平台下运行C代码时,C库函数就是对Windows系统调用接口进行的封装,这样做使得语言有了跨平台性,也方便进行二次开发。这就是因为在根本上操作系统确实像银行一样,并不完全信任用户程序,因为直接开放底层资源(如内存、磁盘、硬件访问权限)给用户程序会带来巨大的风险。所以就向银行一样他的服务是由工作人员隔着一层玻璃,然后对顾客进行服务的。
112 0
|
12月前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
523 34
|
11月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
234 26
|
12月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
258 17
|
Linux API C语言
Linux基础IO
Linux基础IO操作是系统管理和开发的基本技能。通过掌握文件描述符、重定向与管道、性能分析工具、文件系统操作以及网络IO命令等内容,可以更高效地进行系统操作和脚本编写。希望本文提供的知识和示例能帮助读者更深入地理解和运用Linux IO操作。
262 14
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
595 13