You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by ro...@apache.org on 2006/06/16 02:21:32 UTC
svn commit: r414711 - in /apr/examples/trunk: README cat/ cat/cat.c
Author: rooneg
Date: Thu Jun 15 17:21:32 2006
New Revision: 414711
URL: http://svn.apache.org/viewvc?rev=414711&view=rev
Log:
Add an implementation of 'cat', which serves to introduce file i/o.
* cat/cat.c: New example.
* README: Note the addition of cat.
Added:
apr/examples/trunk/cat/
apr/examples/trunk/cat/cat.c
Modified:
apr/examples/trunk/README
Modified: apr/examples/trunk/README
URL: http://svn.apache.org/viewvc/apr/examples/trunk/README?rev=414711&r1=414710&r2=414711&view=diff
==============================================================================
--- apr/examples/trunk/README (original)
+++ apr/examples/trunk/README Thu Jun 15 17:21:32 2006
@@ -12,5 +12,8 @@
ls
A basic implementation of the unix ls command.
+cat
+ A basic implementation of the unix cat command.
+
echoserver
A basic TCP server that writes back whatever you send to it.
Added: apr/examples/trunk/cat/cat.c
URL: http://svn.apache.org/viewvc/apr/examples/trunk/cat/cat.c?rev=414711&view=auto
==============================================================================
--- apr/examples/trunk/cat/cat.c (added)
+++ apr/examples/trunk/cat/cat.c Thu Jun 15 17:21:32 2006
@@ -0,0 +1,58 @@
+/* This code is PUBLIC DOMAIN, and is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND. See the accompanying
+ * LICENSE file.
+ */
+#include "apr.h"
+#include "apr_file_io.h"
+#include <stdlib.h>
+
+apr_status_t cat(const char *fname, apr_file_t *out, apr_pool_t *pool)
+{
+ apr_size_t nbytes = 1;
+ apr_status_t rv;
+ apr_file_t *f;
+ char c;
+
+ rv = apr_file_open(&f, fname, APR_FOPEN_READ, APR_OS_DEFAULT, pool);
+ if (rv)
+ return rv;
+
+ while ((rv = apr_file_read(f, &c, &nbytes)) == APR_SUCCESS) {
+ rv = apr_file_write(out, &c, &nbytes);
+ if (rv)
+ return rv;
+ }
+
+ if (APR_STATUS_IS_EOF(rv))
+ return APR_SUCCESS;
+ else
+ return rv;
+}
+
+int main(int argc, const char * const argv[])
+{
+ apr_pool_t *pool, *subpool;
+ apr_file_t *out;
+ apr_status_t rv;
+ int i;
+
+ apr_initialize();
+ atexit(apr_terminate);
+ apr_pool_create(&pool, NULL);
+
+ apr_file_open_stdout(&out, pool);
+
+ apr_pool_create(&subpool, pool);
+
+ for (i = 1; i < argc; ++i) {
+ apr_pool_clear(subpool);
+
+ rv = cat(argv[i], out, subpool);
+ if (rv)
+ return EXIT_FAILURE;
+ }
+
+ apr_pool_destroy(pool);
+
+ return EXIT_SUCCESS;
+}