Swish-e通过配置文件,进行索引过程的配置。swish.c中main函数开始,首先通过swish_new()初始化SWISH变量;
1.基本流程:
1.1 SWISH初始化
然后通过判断run_mode如果为-c confile这种方式,则switch到cmd_index( sw, params );进行索引处理。
2.2 cm_index函数处理过程
2.2. getdefaults 具体分析
Void getdefaults(SWISH * sw, char *conffile, int *hasdir, int *hasindex, int hasverbose) { if ((fp = fopen(conffile, F_READ_TEXT)) == NULL || !isfile(conffile)) progerrno("Couldn't open the configuration file '%s': ", conffile);
if ( sw->verbose >= 2 ) printf("Parsing config file '%s'/n", conffile );
/* Init default index file */ addindexfile(sw, INDEXFILE); indexf = sw->indexlist; while ( !feof( fp ) ) { /* Free previous line */ if ( line ) efree( line ); /* Read a line */ line = read_line_from_file( &linenumber, fp ); if (strcasecmp(w0, "IndexDir") == 0) { if (sl->n > 1) { if (!*hasdir) { gotdir = 1; grabCmdOptions(sl, 1, &sw->dirlist); } } else progerr("%s: requires at least one value", w0);
continue; } |
getdefaults 代码片段
通过解析 conf 文件中的配置项,对于 swish 中的项进行初始化; 其中如果对于 Directive 有多个参数的时候,通过 grabCmdOption 放入到数组中。 |
getdefaults 函数分析
2.2.2 DB_Create 创建索引文件
此时我们传入的run_mode不是update或者remove,因此需要创建索引文件,参见swish.c: L1379行代码。DB_create函数通过函数指针指向db_native.c中的 DB_Create_Native函数实现。
在索引文档之前,先建立临时索引文件,主要写入了文件的版本标识、系统时间戳等。
DB_Create_Native 函数:
if ( is_directory( dbname ) ) progerr( "Index file '%s' is a directory", dbname );
swish_magic = SWISH_MAGIC; /* Allocate structure */ DB = (struct Handle_DBNative *) newNativeDBHandle(sw, dbname); DB->mode = DB_CREATE; DB->unique_ID = (long) time(NULL); /* Ok, so if more than one index is created the second... */ ------------ /* Create index File */
CreateEmptyFile(filename); if (!(DB->fp = openIndexFILEForReadAndWrite(filename))) progerrno("Couldn't create the index file /"%s/": ", filename); DB->cur_index_file = estrdup(filename); printlong(DB->fp, swish_magic, sw_fwrite); printlong(DB->fp, DB->unique_ID, sw_fwrite); ------------- for (i = 0; i < VERYBIGHASHSIZE; i++) DB->hashoffsets[i] = (sw_off_t)0; for (i = 0; i < VERYBIGHASHSIZE; i++) DB->lasthashval[i] = (sw_off_t)0; |
DB_Create_native 代码片段
|
DB_Create_native 函数分析