⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text.c

📁 遍历指定文件夹所有文件
💻 C
字号:

/*parse config file, get argument*/

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "text.h"

FileFilter filefilter;

int parseConfFile (char *file) 
{
	int fds, i;
	int eff;
	char *posParse;
	char *tok;
	
	fds = open(file, O_RDONLY);
	if (fds < 0)
		return -1;
	char *tmp = readfile(fds);
	close(fds);
	// suppress commentary
	eff = 0;
	for (i=0; tmp[i] != 0; i++){
		switch (tmp[i]){
			case '\n': 
				eff = 0; 
				break;
			case '#': 
				eff = 1; // no break !!!
			default: 
				if (eff) tmp[i] = ' ';
		}
	}
	posParse = tmp;
	memset(&filefilter, 0, sizeof(FileFilter));
	eff = 0;
	tok = nextToken(&posParse, ' ');
	while (tok != NULL){
		if (!strcasecmp(tok, "FileType")) {
			eff = 1;
		}else{
			if(eff){
				strcpy(filefilter.filter[filefilter.num], tok);
				filefilter.num ++;
			}
		}
		tok = nextToken(&posParse, ' ');
	}
	free(tmp);
	#ifdef DEBUG
	for(i = 0; i < filefilter.num; i ++){
		printf("[filter %d] = %s\n", i, filefilter.filter[i]);
	}
	#endif
	return 0;
}


/* Read a whole file
 */
char *readfile (int fds) 
{
	ssize_t pos = 0;
	ssize_t size = 512;
	int cont = 1;
	char buf[500];
	ssize_t nbRead;
	char *res = malloc(size);
	while(cont == 1){
		switch (nbRead = read(fds, &buf, 500)){
			case 0 : 
				cont = 0; 
				break;
			case -1 : 
				cont = -1; 
				break;
			default :
				if (pos + nbRead >= size) {
					size *= 2;
					char *tmp = malloc(size);
					memcpy(tmp, res, pos);
					free(res);
					res = tmp;
				}
				memcpy(res+pos, buf, nbRead);
				pos += nbRead;
			  	break;
		}
	}
	res[pos] = 0;
	return res;
}


/* find the next token in the  in config file
 * must delete comments
 * no allocation (cf strtok); content is changed
 */
char *nextToken(char **posParse, char c) 
{
	// go to the beginning of next word
	int cont = 1;
	while (cont) {
	  if (**posParse == c || **posParse == ' ' || **posParse == '\t'
	      || **posParse == '\r' || **posParse == '\n') {
	    (*posParse)++;
	  } else if (**posParse == '#') {
	    *posParse = strchr(*posParse, '\n');
	    if (*posParse == NULL) {
	      return NULL;
	    } else {
	      (*posParse)++;
	    }
	  } else {
	    cont=0;
	  }
	}
	// find the end of this word
	char *deb = *posParse;
	if (**posParse == '\"') {
	  deb++; (*posParse)++;
	  while (**posParse != 0 && **posParse != '\"') (*posParse)++;
	} else {
	  while(**posParse != 0 && **posParse != c && **posParse != ' '
	        && **posParse != '\t' && **posParse != '\r' && **posParse != '\n') {
	    (*posParse)++;
	  }
	  if (*posParse == deb) return NULL; // EOF
	}
	if (**posParse != 0) {
	  **posParse = 0;
	  (*posParse)++;
	}
	return deb;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -