好消息,scws-0.0.1 pre 版提前发布,好多朋友不停的期待和催盼,这个套件先发布一个 pre 版。包括了全部代码和一份GBK词典和相关说明。为适当统计下载的人群和数量,该文件设为必须必须论坛会员才能下载,由此不便深感抱歉。
演示地址:
http://www.hightman.cn/demo/scws/v4.php
下载地址:
在文章附件中 (下载前必须先登录论坛)
压缩包中包括以下部分:
etc/ - gbk 版本词典和rules.ini
libscws/ - scws 库核心代码
phpext/ - php4 扩展代码 (注意必须是 PHP4)
src/ - scws 命令行工具
---
Notice:
src/ 下的 cmd.c 必须先编译 libscws/ 生成 libscws.a 才可以。
phpexe/ 下的 libscws 直接连接 ../libscws
安全起见请先在 libscws/ 执行 make clean
Moreinfo visit page plz:
http://www.hightman.cn/bbs/
代码:
Libscws 及 PHP扩展 授权声明
本软件及所有代码和文件(包括但不限于程序源码、测试代码、词典、规则集文件、相关说明)全部由 hightman 独立完成,本人保留一切相关权利。
本软件开放源代码提供下载,旨在促进交流和提高。分词是一个长期的难题,希望这次的发布起到一个抛砖引玉的作用。
本软件未经同意严禁修改移植代码进行分支发布或商业用途(特指出售)等。所有已经正确安装并使用本软件的用户们,希望可以在论坛或其它方式通知我,让我知道有多少人在用它。
本软件承诺不包含任何恶意代码,但由于水平所限,BUG难免。因为本代码的使用或其它方式引起的损失本人不承担任何责任。
本人联系方式:
个人论坛:http://www.hightman.cn QQ:16139558 邮件:hightman2@yahoo.com.cn
不支持 MMAP 的话的补丁
代码:
*** ../../dist/scws-0.0.1-pre/libscws/xdb.h Tue Jun 5 12:19:46 2007
--- xdb.h Sat Jun 9 13:49:56 2007
***************
*** 2,8 ****
* @file xdb.h (read only)
* @author Hightman Mar
* @editor set number ; syntax on ; set autoindent ; set tabstop=4 (vim)
! * $Id: xdb.h,v 1.1.1.1 2007/06/05 04:19:45 hightman Exp $
*/
#ifndef _SCWS_XDB_20070525_H_
--- 2,8 ----
* @file xdb.h (read only)
* @author Hightman Mar
* @editor set number ; syntax on ; set autoindent ; set tabstop=4 (vim)
! * $Id: xdb.h,v 1.2 2007/06/09 05:48:27 hightman Exp $
*/
#ifndef _SCWS_XDB_20070525_H_
***************
*** 54,59 ****
--- 54,60 ----
unsigned int fsize; /* total filesize */
int version; /* version: low 4bytes */
char *fmap; /* file content image by mmap (read only) */
+ int mode; /* xdb_open for write or read-only */
} xdb_st, *xdb_t;
/* xdb: open the db, mode = r|w|n */
*** ../../dist/scws-0.0.1-pre/libscws/xdb.c Tue Jun 5 12:19:46 2007
--- xdb.c Sat Jun 9 13:49:40 2007
***************
*** 2,8 ****
* @file xdb.c (xtree use file storage)
* @author Hightman Mar
* @editor set number ; syntax on ; set autoindent ; set tabstop=4 (vim)
! * $Id: xdb.c,v 1.1.1.1 2007/06/05 04:19:45 hightman Exp $
*/
#include "xdb.h"
--- 2,8 ----
* @file xdb.c (xtree use file storage)
* @author Hightman Mar
* @editor set number ; syntax on ; set autoindent ; set tabstop=4 (vim)
! * $Id: xdb.c,v 1.2 2007/06/09 05:48:27 hightman Exp $
*/
#include "xdb.h"
***************
*** 13,19 ****
--- 13,23 ----
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
+
+ #ifdef HAVE_MMAP
#include <sys/mman.h>
+ #endif
+
#include <sys/file.h>
/* file lock by fcntl */
***************
*** 169,176 ****
--- 173,182 ----
x->base = xhdr.base;
x->version = (int) xhdr.ver;
x->fmap = NULL;
+ x->mode = mode;
/* try mmap if readonly */
+ #ifdef HAVE_MMAP
if (mode != 'w')
{
x->fmap = (char *) mmap(NULL, x->fsize, PROT_READ, MAP_SHARED, x->fd, 0);
***************
*** 186,191 ****
--- 192,198 ----
return NULL;
}
}
+ #endif
return x;
}
***************
*** 214,219 ****
--- 221,227 ----
x->base = base ? base : 0xf422f;
x->fsize = sizeof(xhdr) + x->prime * sizeof(xptr_st);
x->fmap = NULL;
+ x->mode = 'w';
memset(&xhdr, 0, sizeof(xhdr));
memcpy(&xhdr.tag, XDB_TAGNAME, 3);
xhdr.ver = XDB_VERSION;
***************
*** 232,249 ****
{
if (x == NULL)
return;
!
if (x->fmap != NULL)
{
munmap(x->fmap, x->fsize);
x->fmap = NULL;
}
if (x->fd >= 0)
{
! lseek(x->fd, 12, SEEK_SET);
! write(x->fd, &x->fsize, sizeof(x->fsize));
! _xdb_flock(x->fd, LOCK_UN);
close(x->fd);
x->fd = -1;
}
--- 240,262 ----
{
if (x == NULL)
return;
!
! #ifdef HAVE_MMAP
if (x->fmap != NULL)
{
munmap(x->fmap, x->fsize);
x->fmap = NULL;
}
+ #endif
if (x->fd >= 0)
{
! if (x->mode == 'w')
! {
! lseek(x->fd, 12, SEEK_SET);
! write(x->fd, &x->fsize, sizeof(x->fsize));
! _xdb_flock(x->fd, LOCK_UN);
! }
close(x->fd);
x->fd = -1;
}