• PUDN用户
    了解作者
  • Unix_Linux
    开发工具
  • 6KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 181
    下载次数
  • 2004-06-19 15:28
    上传日期
linux系统下实现类似win的对多个文件的文件内容检索的功能
fsch.zip
  • fsch
  • fsch
    10KB
  • fsch.c
    5.8KB
  • www.pudn.com.txt
    218B
内容介绍
/** * Title: cploader.c * Type: C (*.c) * Complier: gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1) * Description: send file to armboard's flash * Copyright: Copyright (c) 2004 * Company: djws * author djws * version 1.0 */ /* search the file or directory's content */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <dirent.h> #include <sys/stat.h> #define PRINT_VERSION printf("version 1.0\n"); long flen(FILE *fp); void print_help(); void default_init(char *filename, char *topic, char *schstr); void myerror(char *str); void file_search(char *filename, char *str, char *topic); void do_search(char *filename, char *topic, char *str); int count; //int showcount; //char show[5] = "/-\\-"; long flen(FILE *fp) { int i = 0; if(fp == NULL) return 0; if(fseek(fp, 0, SEEK_SET)) return 0; while(!feof(fp)) { i++; fgetc(fp); } if(fseek(fp, 0, SEEK_SET)) return 0; return i-1; } void print_help() { printf("Example: fsch [options]... [parameter]...\n"); printf("Options: \n"); printf(" -f, --filename [PATH] set your search path (or file's name), default is '/root'\n"); printf(" -t, --topic [KEY] set the key which files' name include, default is empty\n"); printf(" -s, --string [string] set the string your want to search in the file, default is 'DJWS'\n"); printf(" -h, --help print help\n"); printf(" -v, --version print version\n"); printf("Finished.\n"); } void default_init(char *filename, char *topic, char *schstr) { strcpy(filename, "/root"); strcpy(topic, ""); strcat(schstr, "DJWS"); } void myerror(char *str) { printf("%s\n", str); exit(0); } void file_search(char *filename, char *str, char *topic) { FILE *fp = NULL; long len = 0; char *buf = NULL; int i, j, k; char tmp[1024]; if(strstr(filename, topic) == NULL) { //printf("! filename=%s topic=%s\n", filename, topic); strcpy(tmp, filename); return; } //l = strlen(filename)+12; //printf("Check file: %s\n", filename); if((fp=fopen(filename, "rb")) == NULL) { printf("fail to open the file: %s\n", filename); return; } fseek(fp, 0, SEEK_SET); len = flen(fp); if(len < strlen(str)) { fclose(fp); return; } buf = (char *)malloc(2048); while(len > 2048) { fread((void *)buf, 2048, 1, fp); for(i=0;i<1024;i++) { for(j=0;j<strlen(str);j++) tmp[j] = *(buf+i+j); tmp[strlen(str)] = '\0'; if(strcmp(tmp, str) == 0) { /*printf("\r"); for(k=0;k<l;k++) printf(" "); printf("\r");*/ count++; printf("%s\n", filename); fclose(fp); free(buf); return; } } len -= 1024; fseek(fp, -1024, SEEK_CUR); } fread((void *)buf, len, 1, fp); for(i=0;i<len-strlen(str);i++) { for(j=0;j<strlen(str);j++) tmp[j] = *(buf+i+j); tmp[strlen(str)] = '\0'; if(strcmp(tmp, str) == 0) { /*printf("\r"); for(k=0;k<l;k++) printf(" "); printf("\r");*/ count++; printf("%s\n", filename); fclose(fp); free(buf); return; } } free(buf); /*printf("\r"); for(k=0;k<l;k++) printf(" "); printf("\r");*/ fclose(fp); } void do_search(char *filename, char *topic, char *str) { char tmp[1280]; DIR *dp = NULL; struct dirent *dirp = NULL; struct stat filestat; int len = strlen(filename); if(filename[len-1] == '/') filename[len-1] = 0; if(stat(filename, &filestat) < 0) myerror("Stat Read Error.\n"); if(S_ISREG(filestat.st_mode)) { file_search(filename, str, topic); return; } else if(S_ISDIR(filestat.st_mode)) { if((dp=opendir(filename)) == NULL) { printf("Can't open directory%s\n", filename); return; } strcpy(tmp, filename); while((dirp=readdir(dp)) != NULL) { strcat(tmp, "/"); strcat(tmp, dirp->d_name); if((strcmp(dirp->d_name, ".")==0) || (strcmp(dirp->d_name, "..")==0)) { strcpy(tmp, filename); continue; } /*if(strstr(tmp, topic) == NULL) { strcpy(tmp, filename); continue; }*/ if(stat(tmp, &filestat) < 0) myerror("Stat Read Error.\n"); if(S_ISDIR(filestat.st_mode)) { do_search(tmp, topic, str); } else if(S_ISREG(filestat.st_mode)) { file_search(tmp, str, topic); } strcpy(tmp, filename); } closedir(dp); } else { printf("File type error, must be a file or a directory!\n"); return; } } int main(int argc, char **argv) { char cmd[1024]; char param[1024]; int i = 1; int readparam = 0; char topic[1024]; char filename[1024]; char schstr[1024]; default_init(filename, topic, schstr); while(i < argc) { i++; if(strlen(argv[i-1]) > 1023) { printf("Too long Parameter, Error.\n"); print_help(); exit(0); } if(readparam == 1) { strcpy(param, argv[i-1]); if(param[0] == '-') { printf("Parameter Error.\n"); print_help(); exit(0); } if((strcmp(cmd, "--string")==0) || (strcmp(cmd, "-s")==0)) { strcpy(schstr, param); } else if((strcmp(cmd, "--filename")==0) || (strcmp(cmd, "-f")==0)) { strcpy(filename, param); } else if((strcmp(cmd, "--topic")==0) || (strcmp(cmd, "-t")==0)) { strcpy(topic, param); } else { printf("Parameter Error.\n"); print_help(); exit(0); } readparam = 0; } else { strcpy(cmd, argv[i-1]); if(strlen(cmd) <= 1) { printf("Parameter Error.\n"); print_help(); exit(0); } if(cmd[0] != '-') { printf("Parameter Error.\n"); print_help(); exit(0); } if((strcmp(cmd, "--help")==0) || (strcmp(cmd, "-h")==0)) { print_help(); exit(0); } if((strcmp(cmd, "-version")==0) || (strcmp(cmd, "-v")==0)) { PRINT_VERSION exit(0); } readparam = 1; } } if((readparam==1) && (argc!=1)) { print_help(); exit(0); } printf("\nfound string \"%s\" in followed files:\n\n", schstr); count = 0; // showcount = 0; do_search(filename, topic, schstr); printf("\n%d files found.\nEND!\n", count); }
评论
    相关推荐
    • 最小linux文件系统
      最小linux文件系统 用于嵌入式系统设计方面的
    • 模拟的linux文件操作系统
      这是一个简单的linux操作系统文件模拟,比较适合学习和草考
    • LINUX 文件系统
      LINUX文件系統介紹
    • Linux文件系统命令
      Linux文件系统命令,有mk2fs、mktemp、dump、restore等相关命令
    • 模拟linux文件系统
      模拟linux文件系统
    • 模拟 Linux 文件系统 C++
      (8) copy …: 拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝,host文件系统的文件命名为…,如:将windows下D:盘的文件\data\sample\test.txt文件拷贝到...
    • LINUX文件系统模拟
      模拟Linux文件系统,实现了基本的文件操作和用户管理系统,加上了权限管理。 默认用户名root 默认密码xiaox 使用说明登陆后键入help即可见
    • linux文件系统结构分析
      主要讲解linux操作系统下文件系统的结构,以及进程如何去操作一个文件
    • 模拟Linux文件系统
      大作业,模拟Linux文件系统,使用C++实现,仅供作业参考,少许bug,提交应该是没问题的。
    • 模拟Linux文件系统
      在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。 1. 在现有机器硬盘上开辟100M的硬盘空间,作为设定的硬盘空间。 2. 编写一管理程序simdisk对此空间进行管理,以模拟Linux...