如何将函数的递归部分转化为线程? #包括 #包括 #包括 #包括 int符合_标准(字符*条目_名称,字符*名称){ int标准_met=0; if(name!=NULL){ if(strcmp(条目名称,名称)==0){ 符合标准=1; } } 符合退货标准; } void find(char*where,char*name){ DIR*DIR; 结构方向*条目; 字符*e_名称; 字符路径[1024]; 字符curr_dir[]=”; char pre_dir[]=”; INTE_型; int是_点; dir=opendir(其中); if(dir){ while((entry=readdir(dir))!=NULL){ e_类型=条目->d_类型; e_name=条目->d_name; is_dots=strcmp(e_name,curr_dir)==0 | | strcmp(e_name,pre_dir)==0; snprintf(路径,sizeof(路径),“%s/%s”,其中,e_名称); 如果(!is_点){ 如果(符合标准(e_名称、名称)){ printf(“%s\n”,路径); } if(e_type==DT_DIR){ 查找(路径、名称); } } } closedir(dir); } } int main(){ char*在哪里; 字符*名称; 字符c[1024]; chard[1024]; printf(“输入dir\n”); scanf(“%s”,c); 式中=c; printf(“输入文件\n”); scanf(“%s”,d); name=d; 查找(位置、名称); 返回0; }

如何将函数的递归部分转化为线程? #包括 #包括 #包括 #包括 int符合_标准(字符*条目_名称,字符*名称){ int标准_met=0; if(name!=NULL){ if(strcmp(条目名称,名称)==0){ 符合标准=1; } } 符合退货标准; } void find(char*where,char*name){ DIR*DIR; 结构方向*条目; 字符*e_名称; 字符路径[1024]; 字符curr_dir[]=”; char pre_dir[]=”; INTE_型; int是_点; dir=opendir(其中); if(dir){ while((entry=readdir(dir))!=NULL){ e_类型=条目->d_类型; e_name=条目->d_name; is_dots=strcmp(e_name,curr_dir)==0 | | strcmp(e_name,pre_dir)==0; snprintf(路径,sizeof(路径),“%s/%s”,其中,e_名称); 如果(!is_点){ 如果(符合标准(e_名称、名称)){ printf(“%s\n”,路径); } if(e_type==DT_DIR){ 查找(路径、名称); } } } closedir(dir); } } int main(){ char*在哪里; 字符*名称; 字符c[1024]; chard[1024]; printf(“输入dir\n”); scanf(“%s”,c); 式中=c; printf(“输入文件\n”); scanf(“%s”,d); name=d; 查找(位置、名称); 返回0; },c,linux,pthreads,C,Linux,Pthreads,我有这样一个代码,它执行以下操作。传入目录以开始搜索文件。 传入一个字符串,该字符串包含要在计算机上的文件系统中“查找”的文件名。 从给定目录开始,对于与搜索字符串匹配的每个文件,在屏幕上打印绝对路径+文件名 我想使用这个程序并添加线程来代替find函数的递归部分。我在生成分离的线程并确保它们在没有锁或任何限制的情况下正常运行时遇到问题 任何帮助都将不胜感激。风格指南:点和箭头->操作符绑定非常紧密,因为它们是。它们不应该用空格书写。编写entry->d_type不是惯用的C语言,表示编码者是新

我有这样一个代码,它执行以下操作。传入目录以开始搜索文件。 传入一个字符串,该字符串包含要在计算机上的文件系统中“查找”的文件名。 从给定目录开始,对于与搜索字符串匹配的每个文件,在屏幕上打印绝对路径+文件名

我想使用这个程序并添加线程来代替find函数的递归部分。我在生成分离的线程并确保它们在没有锁或任何限制的情况下正常运行时遇到问题


任何帮助都将不胜感激。

风格指南:点
和箭头
->
操作符绑定非常紧密,因为它们是。它们不应该用空格书写。编写
entry->d_type
不是惯用的C语言,表示编码者是新手。使用
entry->d_type
。到目前为止,你应该尽最大努力。在没有符号链接的情况下,目录层次结构是独立的(并且您不遵循符号链接),因此使用线程分析找到的每个目录的内容是合法的。您只需要确保将信息适当地传递给线程函数。因为您在Linux上,所以将使用POSIX线程(pthreads)。线程函数有一个
void*
参数。争论决不能改变。您还需要跟踪启动的线程,以便释放内存并等待它们终止。为什么您认为分离的线程是合适的?他们可能不是。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <time.h>

int meets_criteria(char * entry_name, char * name) {
    int criteria_met = 0;
    if (name != NULL) {
        if(strcmp(entry_name, name) == 0) {
            criteria_met = 1;
        }
    }
    return criteria_met;
}
void find(char * where, char * name)  {
    DIR * dir;
    struct dirent * entry;
    char * e_name;
    char path[1024];
    char curr_dir[] = ".";
    char pre_dir[] = "..";
    int e_type;
    int is_dots;
    dir = opendir(where);
    if (dir) {
        while ((entry = readdir(dir)) != NULL) {
            e_type = entry -> d_type;
            e_name = entry -> d_name;
            is_dots = strcmp(e_name, curr_dir) == 0 || strcmp(e_name, pre_dir) == 0;
            snprintf(path, sizeof(path),"%s/%s", where, e_name);
            if (!is_dots) {
                if (meets_criteria(e_name, name)) {
                    printf("%s\n", path);
                }
                if (e_type == DT_DIR) {
                    find(path, name);
                }
            }
        }
        closedir(dir);
    }
}
int main () {
    char *where;
    char *name;
    char c[1024];
    char d[1024];
    printf("Enter dir\n");
    scanf("%s", c);
    where = c;
    printf("Enter file\n");
    scanf("%s", d);
    name = d;
    find(where, name);
    


 return 0;
}