$ export P=$HOME/apr $ tar zxvf apr-1.2.7.tar.gz $ cd apr-1.2.7 $ ./configure --prefix=$P $ make && make install
$ tar zxvf apr-util-1.2.7.tar.gz $ cd apr-util-1.2.7 $ ./configure --prefix=$P --with-apr=$P/bin/apr-1-config $ make && make install
#include <apr.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
apr_pool_t *pool;
apr_file_t *out;
apr_initialize();
atexit(apr_terminate());
apr_pool_create(&pool, NULL);
apr_file_open_stdout(&out, pool);
apr_file_printf(out, "Hello World\n");
apr_pool_destroy(pool);
return EXIT_SUCCESS;
}
# first, cflags (i.e. -g -O2 -pthread) $ export CFLAGS=`apr-1-config --cflags` # then, cppflags (i.e. -I/path/to/includes -D_REENTRANT) $ export CPPFLAGS=`apr-1-config --cppflags` # then link options (i.e. -L /path/to/libs -lapr-1) $ export LINK_LD=`apr-1-config --link-ld` $ cc $CFLAGS $CPPFLAGS $LINK_LD program.c -o program
const char *find_interesting_string(apr_pool_t *pool) {
const char *interesting = NULL, *temp;
apr_pool_t *subpool;
int i;
apr_pool_create (&subpool, pool);
for (i = 0; i < 100; ++i) {
apr_pool_clear(subpool);
function_that_uses_temp_memory(&temp, subpool);
if (retval_is_interesting(temp)) {
interesting = apr_pstrdup(pool, temp);
break;
}
}
apr_pool_destroy(subpool);
return interesting;
}
apr_status_terrno in most casesapr_status_t some_function(apr_pool_t *pool) {
apr_status_t err;
apr_file_t *fp;
err = apr_file_open(&fp, "the-file-name", APR_READ,
APR_OS_DEFAULT, pool);
if (APR_STATUS_IS_SUCCESS(err)) {
/* read from the file... */
} else if (APR_STATUS_IS_ENOENT(err)) {
/* ok, the file wasn't found. do something useful
* here. */
return err;
} else {
return err;
}
return APR_SUCCESS;
}
apr_hash_t - Hash Tableapr_array_header_t - Variable Length Arraycat/cat.c
echoserver/echoserver.c
serve() functionapr_socket_accept and then apr_socket_recv
and apr_socket_send
XXX fork XXX executing processes
That's all Folks.