context:暂时用不到,忽略。
flags:设置为0,zookeeper开发团队保留以后使用。
3.2.1.2 zookeeper_close
ZOOAPI int zookeeper_close(zhandle_t *zh);
功能:
关闭句柄,释放资源。 参数:
zh:zookeeper句柄。 返回值:
ZOK表示成功
ZBADARGUMENTS表示输入参数无效
ZMARSHALLINGERROR - failed to marshall a request; possibly, out of memory ZOPERATIONTIMEOUT - failed to flush the buffers within the specified timeout.
ZCONNECTIONLOSS - a network error occured while attempting to send request to server
ZSYSTEMERROR -- a system (OS) error occured; it's worth checking errno to get details
3.2.1.3 zoo_create
ZOOAPI int zoo_create(zhandle_t *zh, const char *path, const char *value,int valuelen,
const struct ACL_vector *acl, int flags,char *path_buffer, int path_buffer_len);
功能:
创建一个同步的zookeeper节点。 参数:
zh:zookeeper的句柄,由zookeeper_init得到。 path:节点名称,就是一个类似于文件系统写法的路径。
value:欲存储到该节点的数据。如果不存储数据,则设置为NULL。 valuelen:欲存储的数据的长度。如果不存储数据,则设置为-1.
acl:初始的ACL节点,ACL不能为空。比如设置为&ZOO_OPEN_ACL_UNSAFE。 flags:一般设置为0。
path_buffer:将由新节点填充的路径值。可设置为NULL。
8
path_buffer_len:path_buffer的长度。 返回值:
ZOK表示操作成功。
ZNONODE表示该节点不存在。 ZNODEEXISTS表示节点已经存在。 ZNOAUTH表示客户端(client)无权限。
ZNOCHILDRENFOREPHEMERALS表示不能够创建临时(ephemeral)节点的子节点(children)。
3.2.1.4 zoo_wexists
ZOOAPI int zoo_wexists(zhandle_t *zh, const char *path, watcher_fn watcher,
void* watcherCtx, struct Stat *stat);
功能:
同步监视一个zookeeper节点(node)是否存在。 参数:
zh:zookeeper的句柄,由zookeeper_init得到。 path:节点名称,就是一个类似于文件系统写法的路径。
watcher:如果不为 NULL 则会在服务器端设置监视,当节点发生变化时客户端会得到通知,即使当前指定的节点不存在也会设置监视,这样该节点被创建时,客户端也可以得到通知。
watcherCtx: 用户指定的数据,将被传入到监视器回调函数中,与由 zookeeper_init() 设置的全局监视器上下文不同,该函数设置的监视器上下文只与当前的监视器相关联。 stat:返回的Stat信息 返回值:
ZOK表示操作成功。
ZNONODE表示该节点不存在。
ZNOAUTH表示客户端(client)无权限。 ZINVALIDSTATE表示存在非法的参数。
9
3.2.1.5 zoo_set
ZOOAPI int zoo_set(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version); 功能:
向zookeeper节点写数据。 参数:
zh:zookeeper的句柄,由zookeeper_init得到。 path:节点名称,就是一个类似于文件系统写法的路径。 buffer:欲写的数据。 buflen:欲写的数据的长度。
version:检查这个节点的版本是否为version。当设置为-1时,不会进行版本检查。
3.2.1.6 zoo_get
ZOOAPI int zoo_get(zhandle_t *zh, const char *path, int watch, char *buffer, int* buffer_len, struct Stat *stat); 功能:
获取zookeeper节点数据。 参数:
zh:zookeeper的句柄,由zookeeper_init得到。 path:节点名称,就是一个类似于文件系统写法的路径。
watch: 如果非0,则在服务器端设置监视,当节点发生变化时客户端会得到通知。 buffer:用于保存从 zookeeper 服务器获取的节点数据。
buffer_len:buffer 大小,一旦成功返回该值将会被设置为节点数据的实际大小,如果节点的数据为空,则数据大小为 -1,buffer_len 也为 -1。
stat: 如果非空,stat 指向的结构将会保存该节点的 Stat 信息。
3.2.1.7 zoo_state
ZOOAPI int zoo_state(zhandle_t *zh); 功能:
获取zookeeper连接状态。 参数:
zh:zookeeper的句柄,由zookeeper_init得到。
10
返回值:
ZOK operation completed successfully * ZNONODE the parent node does not exist. * ZNODEEXISTS the node already exists * ZNOAUTH the client does not have permission.
* ZNOCHILDRENFOREPHEMERALS cannot create children of ephemeral nodes. * \\param data The data that will be passed to the completion routine when the * function completes.
* \\return ZOK on success or one of the following errcodes on failure: * ZBADARGUMENTS - invalid input parameters
* ZINVALIDSTATE - zhandle state is either ZOO_SESSION_EXPIRED_STATE or ZOO_AUTH_FAILED_STATE
* ZMARSHALLINGERROR - failed to marshall a request; possibly, out of memory
11
第4章 客户端C API编译
4.1 Linux平台编译
? 解压缩源代码包,cd到zookeeper-x.x.x/src/c目录
?
执行./configure
--enable-debug 启用优化和调试信息。(默认是禁用的)
--without-syncapi 禁止同步API支持,不创建zookeeper_mt库。(默认是启用的) --disable-static 不创建静态库。(默认是启用的) --disable-shared 不创建共享库。(默认是启用的)
注意:关于执行configure的一般信息,请看INSTALL文件。
? ? ?
编译好的动态库存放在zookeeper-3.4.6/src/c/.libs/目录下。 执行make或者make install,创建并且安装库。
要生成ZooKeeper API的doxygen文档,可执行doxygen-doc。所有文档将放置到docs子目录中。默认情况下,这个命令只生成HTML。关于其他文档格式的信息,请执行./congiure --help。
4.2 Window平台编译
? 解压缩源代码包,cd到zookeeper-x.x.x/src/c目录 ? 目录下有VS工程,打开工程编译即可
12