You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							342 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							342 lines
						
					
					
						
							11 KiB
						
					
					
				'\" t
 | 
						|
.\"     Title: zconfig
 | 
						|
.\"    Author: [see the "AUTHORS" section]
 | 
						|
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
 | 
						|
.\"      Date: 12/31/2016
 | 
						|
.\"    Manual: CZMQ Manual
 | 
						|
.\"    Source: CZMQ 4.0.2
 | 
						|
.\"  Language: English
 | 
						|
.\"
 | 
						|
.TH "ZCONFIG" "3" "12/31/2016" "CZMQ 4\&.0\&.2" "CZMQ Manual"
 | 
						|
.\" -----------------------------------------------------------------
 | 
						|
.\" * Define some portability stuff
 | 
						|
.\" -----------------------------------------------------------------
 | 
						|
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
.\" http://bugs.debian.org/507673
 | 
						|
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
 | 
						|
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
.ie \n(.g .ds Aq \(aq
 | 
						|
.el       .ds Aq '
 | 
						|
.\" -----------------------------------------------------------------
 | 
						|
.\" * set default formatting
 | 
						|
.\" -----------------------------------------------------------------
 | 
						|
.\" disable hyphenation
 | 
						|
.nh
 | 
						|
.\" disable justification (adjust text to left margin only)
 | 
						|
.ad l
 | 
						|
.\" -----------------------------------------------------------------
 | 
						|
.\" * MAIN CONTENT STARTS HERE *
 | 
						|
.\" -----------------------------------------------------------------
 | 
						|
.SH "NAME"
 | 
						|
zconfig \- work with config files written in rfc\&.zeromq\&.org/spec:4/ZPL\&.
 | 
						|
.SH "SYNOPSIS"
 | 
						|
.sp
 | 
						|
.nf
 | 
						|
//  This is a stable class, and may not change except for emergencies\&. It
 | 
						|
//  is provided in stable builds\&.
 | 
						|
//
 | 
						|
typedef int (zconfig_fct) (
 | 
						|
    zconfig_t *self, void *arg, int level);
 | 
						|
 | 
						|
//  Create new config item
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_new (const char *name, zconfig_t *parent);
 | 
						|
 | 
						|
//  Load a config tree from a specified ZPL text file; returns a zconfig_t
 | 
						|
//  reference for the root, if the file exists and is readable\&. Returns NULL
 | 
						|
//  if the file does not exist\&.
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_load (const char *filename);
 | 
						|
 | 
						|
//  Equivalent to zconfig_load, taking a format string instead of a fixed
 | 
						|
//  filename\&.
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_loadf (const char *format, \&.\&.\&.) CHECK_PRINTF (1);
 | 
						|
 | 
						|
//  Destroy a config item and all its children
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_destroy (zconfig_t **self_p);
 | 
						|
 | 
						|
//  Return name of config item
 | 
						|
CZMQ_EXPORT char *
 | 
						|
    zconfig_name (zconfig_t *self);
 | 
						|
 | 
						|
//  Return value of config item
 | 
						|
CZMQ_EXPORT char *
 | 
						|
    zconfig_value (zconfig_t *self);
 | 
						|
 | 
						|
//  Insert or update configuration key with value
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_put (zconfig_t *self, const char *path, const char *value);
 | 
						|
 | 
						|
//  Equivalent to zconfig_put, accepting a format specifier and variable
 | 
						|
//  argument list, instead of a single string value\&.
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_putf (zconfig_t *self, const char *path, const char *format, \&.\&.\&.) CHECK_PRINTF (3);
 | 
						|
 | 
						|
//  Get value for config item into a string value; leading slash is optional
 | 
						|
//  and ignored\&.
 | 
						|
CZMQ_EXPORT char *
 | 
						|
    zconfig_get (zconfig_t *self, const char *path, const char *default_value);
 | 
						|
 | 
						|
//  Set config item name, name may be NULL
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_set_name (zconfig_t *self, const char *name);
 | 
						|
 | 
						|
//  Set new value for config item\&. The new value may be a string, a printf
 | 
						|
//  format, or NULL\&. Note that if string may possibly contain \*(Aq%\*(Aq, or if it
 | 
						|
//  comes from an insecure source, you must use \*(Aq%s\*(Aq as the format, followed
 | 
						|
//  by the string\&.
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_set_value (zconfig_t *self, const char *format, \&.\&.\&.) CHECK_PRINTF (2);
 | 
						|
 | 
						|
//  Find our first child, if any
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_child (zconfig_t *self);
 | 
						|
 | 
						|
//  Find our first sibling, if any
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_next (zconfig_t *self);
 | 
						|
 | 
						|
//  Find a config item along a path; leading slash is optional and ignored\&.
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_locate (zconfig_t *self, const char *path);
 | 
						|
 | 
						|
//  Locate the last config item at a specified depth
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_at_depth (zconfig_t *self, int level);
 | 
						|
 | 
						|
//  Execute a callback for each config item in the tree; returns zero if
 | 
						|
//  successful, else \-1\&.
 | 
						|
CZMQ_EXPORT int
 | 
						|
    zconfig_execute (zconfig_t *self, zconfig_fct handler, void *arg);
 | 
						|
 | 
						|
//  Add comment to config item before saving to disk\&. You can add as many
 | 
						|
//  comment lines as you like\&. If you use a null format, all comments are
 | 
						|
//  deleted\&.
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_set_comment (zconfig_t *self, const char *format, \&.\&.\&.) CHECK_PRINTF (2);
 | 
						|
 | 
						|
//  Return comments of config item, as zlist\&.
 | 
						|
CZMQ_EXPORT zlist_t *
 | 
						|
    zconfig_comments (zconfig_t *self);
 | 
						|
 | 
						|
//  Save a config tree to a specified ZPL text file, where a filename
 | 
						|
//  "\-" means dump to standard output\&.
 | 
						|
CZMQ_EXPORT int
 | 
						|
    zconfig_save (zconfig_t *self, const char *filename);
 | 
						|
 | 
						|
//  Equivalent to zconfig_save, taking a format string instead of a fixed
 | 
						|
//  filename\&.
 | 
						|
CZMQ_EXPORT int
 | 
						|
    zconfig_savef (zconfig_t *self, const char *format, \&.\&.\&.) CHECK_PRINTF (2);
 | 
						|
 | 
						|
//  Report filename used during zconfig_load, or NULL if none
 | 
						|
CZMQ_EXPORT const char *
 | 
						|
    zconfig_filename (zconfig_t *self);
 | 
						|
 | 
						|
//  Reload config tree from same file that it was previously loaded from\&.
 | 
						|
//  Returns 0 if OK, \-1 if there was an error (and then does not change
 | 
						|
//  existing data)\&.
 | 
						|
CZMQ_EXPORT int
 | 
						|
    zconfig_reload (zconfig_t **self_p);
 | 
						|
 | 
						|
//  Load a config tree from a memory chunk
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_chunk_load (zchunk_t *chunk);
 | 
						|
 | 
						|
//  Save a config tree to a new memory chunk
 | 
						|
CZMQ_EXPORT zchunk_t *
 | 
						|
    zconfig_chunk_save (zconfig_t *self);
 | 
						|
 | 
						|
//  Load a config tree from a null\-terminated string
 | 
						|
//  Caller owns return value and must destroy it when done\&.
 | 
						|
CZMQ_EXPORT zconfig_t *
 | 
						|
    zconfig_str_load (const char *string);
 | 
						|
 | 
						|
//  Save a config tree to a new null terminated string
 | 
						|
//  Caller owns return value and must destroy it when done\&.
 | 
						|
CZMQ_EXPORT char *
 | 
						|
    zconfig_str_save (zconfig_t *self);
 | 
						|
 | 
						|
//  Return true if a configuration tree was loaded from a file and that
 | 
						|
//  file has changed in since the tree was loaded\&.
 | 
						|
CZMQ_EXPORT bool
 | 
						|
    zconfig_has_changed (zconfig_t *self);
 | 
						|
 | 
						|
//  Print the config file to open stream
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_fprint (zconfig_t *self, FILE *file);
 | 
						|
 | 
						|
//  Print properties of object
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_print (zconfig_t *self);
 | 
						|
 | 
						|
//  Self test of this class
 | 
						|
CZMQ_EXPORT void
 | 
						|
    zconfig_test (bool verbose);
 | 
						|
 | 
						|
Please add \*(Aq@interface\*(Aq section in \*(Aq\&./\&.\&./src/zconfig\&.c\*(Aq\&.
 | 
						|
.fi
 | 
						|
.SH "DESCRIPTION"
 | 
						|
.sp
 | 
						|
Lets applications load, work with, and save configuration files\&. This implements rfc\&.zeromq\&.org/spec:4/ZPL, which is a simple structured text format for configuration files\&.
 | 
						|
.sp
 | 
						|
Here is an example ZPL stream and corresponding config structure:
 | 
						|
.sp
 | 
						|
.if n \{\
 | 
						|
.RS 4
 | 
						|
.\}
 | 
						|
.nf
 | 
						|
context
 | 
						|
    iothreads = 1
 | 
						|
    verbose = 1      #   Ask for a trace
 | 
						|
main
 | 
						|
    type = zqueue    #  ZMQ_DEVICE type
 | 
						|
    frontend
 | 
						|
        option
 | 
						|
            hwm = 1000
 | 
						|
            swap = 25000000     #  25MB
 | 
						|
        bind = \*(Aqinproc://addr1\*(Aq
 | 
						|
        bind = \*(Aqipc://addr2\*(Aq
 | 
						|
    backend
 | 
						|
        bind = inproc://addr3
 | 
						|
.fi
 | 
						|
.if n \{\
 | 
						|
.RE
 | 
						|
.\}
 | 
						|
.sp
 | 
						|
.if n \{\
 | 
						|
.RS 4
 | 
						|
.\}
 | 
						|
.nf
 | 
						|
root                    Down = child
 | 
						|
|                     Across = next
 | 
						|
v
 | 
						|
context\-\->main
 | 
						|
|         |
 | 
						|
|         v
 | 
						|
|       type=queue\-\->frontend\-\->backend
 | 
						|
|                      |          |
 | 
						|
|                      |          v
 | 
						|
|                      |        bind=inproc://addr3
 | 
						|
|                      v
 | 
						|
|                    option\-\->bind=inproc://addr1\-\->bind=ipc://addr2
 | 
						|
|                      |
 | 
						|
|                      v
 | 
						|
|                    hwm=1000\-\->swap=25000000
 | 
						|
v
 | 
						|
iothreads=1\-\->verbose=false
 | 
						|
.fi
 | 
						|
.if n \{\
 | 
						|
.RE
 | 
						|
.\}
 | 
						|
.SH "EXAMPLE"
 | 
						|
.PP
 | 
						|
\fBFrom zconfig_test method\fR. 
 | 
						|
.sp
 | 
						|
.if n \{\
 | 
						|
.RS 4
 | 
						|
.\}
 | 
						|
.nf
 | 
						|
//  Create temporary directory for test files
 | 
						|
#   define TESTDIR "\&.test_zconfig"
 | 
						|
zsys_dir_create (TESTDIR);
 | 
						|
 | 
						|
zconfig_t *root = zconfig_new ("root", NULL);
 | 
						|
assert (root);
 | 
						|
zconfig_t *section, *item;
 | 
						|
 | 
						|
section = zconfig_new ("headers", root);
 | 
						|
assert (section);
 | 
						|
item = zconfig_new ("email", section);
 | 
						|
assert (item);
 | 
						|
zconfig_set_value (item, "some@random\&.com");
 | 
						|
item = zconfig_new ("name", section);
 | 
						|
assert (item);
 | 
						|
zconfig_set_value (item, "Justin Kayce");
 | 
						|
zconfig_putf (root, "/curve/secret\-key", "%s", "Top Secret");
 | 
						|
zconfig_set_comment (root, "   CURVE certificate");
 | 
						|
zconfig_set_comment (root, "   \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-");
 | 
						|
assert (zconfig_comments (root));
 | 
						|
zconfig_save (root, TESTDIR "/test\&.cfg");
 | 
						|
zconfig_destroy (&root);
 | 
						|
root = zconfig_load (TESTDIR "/test\&.cfg");
 | 
						|
if (verbose)
 | 
						|
    zconfig_save (root, "\-");
 | 
						|
assert (streq (zconfig_filename (root), TESTDIR "/test\&.cfg"));
 | 
						|
 | 
						|
char *email = zconfig_get (root, "/headers/email", NULL);
 | 
						|
assert (email);
 | 
						|
assert (streq (email, "some@random\&.com"));
 | 
						|
char *passwd = zconfig_get (root, "/curve/secret\-key", NULL);
 | 
						|
assert (passwd);
 | 
						|
assert (streq (passwd, "Top Secret"));
 | 
						|
 | 
						|
zconfig_savef (root, "%s/%s", TESTDIR, "test\&.cfg");
 | 
						|
assert (!zconfig_has_changed (root));
 | 
						|
int rc = zconfig_reload (&root);
 | 
						|
assert (rc == 0);
 | 
						|
assert (!zconfig_has_changed (root));
 | 
						|
zconfig_destroy (&root);
 | 
						|
 | 
						|
//  Test chunk load/save
 | 
						|
root = zconfig_new ("root", NULL);
 | 
						|
assert (root);
 | 
						|
section = zconfig_new ("section", root);
 | 
						|
assert (section);
 | 
						|
item = zconfig_new ("value", section);
 | 
						|
assert (item);
 | 
						|
zconfig_set_value (item, "somevalue");
 | 
						|
zconfig_t *search = zconfig_locate (root, "section/value");
 | 
						|
assert (search == item);
 | 
						|
zchunk_t *chunk = zconfig_chunk_save (root);
 | 
						|
assert (strlen ((char *) zchunk_data (chunk)) == 32);
 | 
						|
char *string = zconfig_str_save (root);
 | 
						|
assert (string);
 | 
						|
assert (streq (string, (char *) zchunk_data (chunk)));
 | 
						|
free (string);
 | 
						|
assert (chunk);
 | 
						|
zconfig_destroy (&root);
 | 
						|
 | 
						|
root = zconfig_chunk_load (chunk);
 | 
						|
assert (root);
 | 
						|
char *value = zconfig_get (root, "/section/value", NULL);
 | 
						|
assert (value);
 | 
						|
assert (streq (value, "somevalue"));
 | 
						|
 | 
						|
//  Test config can\*(Aqt be saved to a file in a path that doesn\*(Aqt
 | 
						|
//  exist or isn\*(Aqt writable
 | 
						|
rc = zconfig_savef (root, "%s/path/that/doesnt/exist/%s", TESTDIR, "test\&.cfg");
 | 
						|
assert (rc == \-1);
 | 
						|
 | 
						|
zconfig_destroy (&root);
 | 
						|
zchunk_destroy (&chunk);
 | 
						|
 | 
						|
//  Delete all test files
 | 
						|
zdir_t *dir = zdir_new (TESTDIR, NULL);
 | 
						|
assert (dir);
 | 
						|
zdir_remove (dir, true);
 | 
						|
zdir_destroy (&dir);
 | 
						|
.fi
 | 
						|
.if n \{\
 | 
						|
.RE
 | 
						|
.\}
 | 
						|
.sp
 | 
						|
.SH "AUTHORS"
 | 
						|
.sp
 | 
						|
The czmq manual was written by the authors in the AUTHORS file\&.
 | 
						|
.SH "RESOURCES"
 | 
						|
.sp
 | 
						|
Main web site: \m[blue]\fB\%\fR\m[]
 | 
						|
.sp
 | 
						|
Report bugs to the email <\m[blue]\fBzeromq\-dev@lists\&.zeromq\&.org\fR\m[]\&\s-2\u[1]\d\s+2>
 | 
						|
.SH "COPYRIGHT"
 | 
						|
.sp
 | 
						|
Copyright (c) the Contributors as noted in the AUTHORS file\&. This file is part of CZMQ, the high\-level C binding for 0MQ: http://czmq\&.zeromq\&.org\&. This Source Code Form is subject to the terms of the Mozilla Public License, v\&. 2\&.0\&. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla\&.org/MPL/2\&.0/\&. LICENSE included with the czmq distribution\&.
 | 
						|
.SH "NOTES"
 | 
						|
.IP " 1." 4
 | 
						|
zeromq-dev@lists.zeromq.org
 | 
						|
.RS 4
 | 
						|
\%mailto:zeromq-dev@lists.zeromq.org
 | 
						|
.RE
 | 
						|
 |