strcpy(buf, path); p = buf + strlen(buf); *p++ = '/'; while (read(fd, &de, sizeof(de)) == sizeof(de)){ if (de.inum == 0) continue; memmove(p, de.name, DIRSIZ); p[DIRSIZ] = 0; if (strcmp(de.name, ".") == 0 || strcmp(de.name, "..") == 0) continue; //如果进入文件夹..或者.则退出此次循环 find(buf, filename); }
时间: 2024-02-14 07:30:38 浏览: 41
这段代码的作用是在给定的路径(path)下递归查找特定文件(filename)。首先,它将路径复制到一个缓冲区(buf)中,并将指针(p)指向缓冲区的末尾。然后,在循环中,它读取指定文件描述符(fd)的目录项(de),如果目录项的inode号为0,则跳过此次循环。接下来,它将目录项的名称(de.name)复制到缓冲区的末尾,并在末尾添加一个斜杠(/)。然后,它检查目录项的名称是否为“.”或“..”,如果是,则继续下一次循环。最后,它递归调用自身,以进入新目录(buf)并继续查找文件。
相关问题
解释while(j>=8) { for(i=0;i<8;i++) { if(buf[i]=='1') c=(c<<1)|1; else c=c<<1; } fwrite(&c,1,1,ofp); pt1++; strcpy(buf,buf+8); j=strlen(buf); }
这段代码的作用是将一个二进制字符串(buf)按8位分组,每组转化为一个字节(c),并将字节写入文件(ofp)。具体解释如下:
1. while(j>=8):当字符串长度大于等于8时,执行循环操作。
2. for(i=0;i<8;i++):循环8次,将8位二进制字符串转化为一个字节。
3. if(buf[i]=='1') c=(c<<1)|1; else c=c<<1;:将二进制字符串转化为一个字节。如果当前位是1,则将c左移1位,并将末位设为1;如果是0,则只将c左移1位。
4. fwrite(&c,1,1,ofp):将一个字节写入文件ofp中。
5. pt1++:指向下一个字符位置。
6. strcpy(buf,buf+8):将字符串buf中的前8位复制到buf中,覆盖之前的内容。
7. j=strlen(buf):计算新的字符串长度。
void readByLL(){ linkList->next = NULL; linkNode *p = linkList;linkNode *temp = p; if((filePath=fopen("InFile.txt","r"))==NULL){ perror("文件不存在或读取错误!"); exit(1); } while(fgets(buf,MAXSIZE,filePath)!=NULL){//逐行读取 len = strlen(buf); //获取长度 for(i=0;i<len+1;i++){ if(buf[i]>='a'&&buf[i]<='z'||buf[i]>='A'&&buf[i]<='Z'){ if(buf[i]>='A'&&buf[i]<='Z')buf[i] += 32; //转换小写 if(!flag_word)flag_word = true; //标识符转换 temp_word[j] = buf[i]; //临时单词变量赋值 j++; //当前单词长度++ }else{ linkNode *node = (LinkList)malloc(sizeof(linkNode)); node->next = NULL; if(flag_word){ flag_word=false; bool flag_equ=false; //等值标识符 while(p){ if(strcmp(p->word,temp_word)==0){p->count++;flag_equ=true;p = linkList;break;} temp = p;p = p->next; }p = temp; if(!flag_equ){strcpy(node->word,temp_word);node->count = 1;p->next = node;n++;} j = 0;p = linkList->next; }memset(temp_word, 0, sizeof(temp_word)); } } } for(p=linkList->next;p!=NULL;p=p->next) for(temp=p->next;temp!=NULL;temp=temp->next){ if(strcmp(p->word,temp->word)>0){ x = p->count;strcpy(temp_word,p->word); p->count = temp->count;strcpy(p->word,temp->word); temp->count = x;strcpy(temp->word,temp_word); } }memset(temp_word, 0, sizeof(temp_word)); fileWrite = fopen("OutFile2.txt","w");p=linkList->next;num = n;n = 0; while(p){fprintf(fileWrite,"%s %d\n",p->word,p->count);p=p->next;} }
这段代码是一个读取文件并统计单词出现次数的程序。主要思路是逐行读取文件内容,然后对每个单词进行处理,最终输出每个单词及其出现次数。
具体实现上,使用一个链表来保存每个单词及其出现次数,对于每个单词,先判断是否为字母,如果是则将其转换为小写并保存在一个临时变量中,否则将临时变量中的单词加入链表中,并清空临时变量。在将单词加入链表时,需要判断该单词是否已经在链表中出现过,如果已经出现过,则将其出现次数加1,否则将其加入链表中。
最后将链表按照单词出现次数从大到小排序,并将结果输出到文件中。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)