2021-04-08 C语言 遍历一个文件夹的所有文件以及函数strstri不区分大小写查找字符串

该代码示例展示了如何使用C语言遍历指定目录下的所有文件,并通过一个不区分大小写的字符串查找函数来检测文件名中是否包含特定关键词(如hdmi, lvds, mipi, edp)。程序会根据找到的关键词更新一个结构体变量,标记相应的显示设备状态。

C语言 遍历一个文件夹的所有文件以及函数strstri不区分大小写查找字符串

 

一、遍历一个文件夹的所有文件代码

int  listallfilename(const char* path)
{
	DIR    *dir;
    struct    dirent    *ptr;
    dir = opendir(path);
    while((ptr = readdir(dir)) != NULL)
    {
        printf("path=%s,d_name: %s\n",path,ptr->d_name);
	}
    closedir(dir);
	return 0;
}

二、函数strstri不区分大小写查找字符串c代码


char* strstri(char * inBuffer, char * inSearchStr)
{
    char*  currBuffPointer = inBuffer;

    while (*currBuffPointer != 0x00)
    {
        char* compareOne = currBuffPointer;
        char* compareTwo = inSearchStr;
        //统一转换为小写字符
        while (tolower(*compareOne) == tolower(*compareTwo))
        {
            compareOne++;
            compareTwo++;
            if (*compareTwo == 0x00)
            {
                return (char*) currBuffPointer;
            }

        }
        currBuffPointer++; 
    }
    return NULL;
}

三、实际应用测试程序

#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
#include <stdbool.h>

struct rk3288_display_devices
{
	bool hdmi;
	bool lvds;
	bool mipi;
	bool edp;
};

struct rk3288_display_devices m_display_devices={0,0,0,0};

char* strstri( char*  inBuffer,  const char* inSearchStr)
{
    const char*  currBuffPointer = inBuffer;

    while (*currBuffPointer != 0x00)
    {
        const char* compareOne = currBuffPointer;
        const char* compareTwo = inSearchStr;
        while (tolower(*compareOne) == tolower(*compareTwo))
        {
            compareOne++;
            compareTwo++;
            if (*compareTwo == 0x00)
            {
                return (char*) currBuffPointer;
            }

        }
        currBuffPointer++; 
    }
    return NULL;
}


int  check_rk3288_drm_display_devices(const char* path)
{
	DIR    *dir;
    struct    dirent    *ptr;
    dir = opendir(path);
    while((ptr = readdir(dir)) != NULL)
    {
        printf("path=%s,d_name: %s\n",path,ptr->d_name);
		if(strstri(ptr->d_name,"hdmi"))
		{
			m_display_devices.hdmi=true;
			printf("hdmi \r\n");
		}else if(strstri(ptr->d_name,"mipi"))
		{
			m_display_devices.mipi=true;
			printf("mipi \r\n");
		}else if(strstri(ptr->d_name,"lvds"))
		{
			m_display_devices.lvds=true;
			printf("lvds \r\n");
		}
		else if(strstri(ptr->d_name,"edp"))
		{
			m_display_devices.edp=true;
			printf("edp \r\n");
		}	
	}
    closedir(dir);
	return 0;
}
int main(){
	check_rk3288_drm_display_devices("/sys/class/drm/");
    return 0;

}

四、android机子运行结果

xxx:/ # test_c
path=/sys/class/drm/,d_name: .
path=/sys/class/drm/,d_name: ..
path=/sys/class/drm/,d_name: card0-HDMI-A-1
hdmi
path=/sys/class/drm/,d_name: card0
path=/sys/class/drm/,d_name: renderD128
path=/sys/class/drm/,d_name: card0-LVDS-1
lvds
path=/sys/class/drm/,d_name: controlD64
path=/sys/class/drm/,d_name: version
xxx:/ # ls -a /sys/class/drm/
. .. card0 card0-HDMI-A-1 card0-LVDS-1 controlD64 renderD128 version
xxx:/ #

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值