前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言 遍历一个文件夹的所有文件以及函数strstri不区分大小写查找字符串

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

原创
作者头像
IT工作者
发布2022-05-20 16:31:48
1.7K0
发布2022-05-20 16:31:48
举报
文章被收录于专栏:程序技术知识程序技术知识

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

代码语言:javascript
复制
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代码

代码语言:javascript
复制
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;
}

三、实际应用测试程序

代码语言:javascript
复制
#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:/ #

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档