diff options
Diffstat (limited to 'public/fd_printf.html')
-rw-r--r-- | public/fd_printf.html | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/public/fd_printf.html b/public/fd_printf.html new file mode 100644 index 0000000..dc4d7c6 --- /dev/null +++ b/public/fd_printf.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>`dprintf`: print formatted text directly to a file descriptor — Luke T. Shumaker</title> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="stylesheet" href="assets/style.css"> + <link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/> +</head> +<body> +<header><a href="/">Luke T. Shumaker</a> » <a href=/blog>blog</a> » fd_printf</header> +<article> +<h1 +id="dprintf-print-formatted-text-directly-to-a-file-descriptor"><code>dprintf</code>: +print formatted text directly to a file descriptor</h1> +<p>This already existed as <code>dprintf(3)</code>. I now feel stupid +for having Implemented <code>fd_printf</code>.</p> +<p>The original post is as follows:</p> +<hr /> +<p>I wrote this while debugging some code, and thought it might be +useful to others:</p> +<pre><code>#define _GNU_SOURCE /* vasprintf() */ +#include <stdarg.h> /* va_start()/va_end() */ +#include <stdio.h> /* vasprintf() */ +#include <stdlib.h> /* free() */ +#include <unistd.h> /* write() */ + +int +fd_printf(int fd, const char *format, ...) +{ + va_list arg; + int len; + char *str; + + va_start(arg, format); + len = vasprintf(&str, format, arg); + va_end(arg); + + write(fd, str, len); + + free(str); + return len; +}</code></pre> +<p>It is a version of <code>printf</code> that prints to a file +descriptor—where <code>fprintf</code> prints to a <code>FILE*</code> +data structure.</p> +<p>The appeal of this is that <code>FILE*</code> I/O is buffered—which +means mixing it with raw file descriptor I/O is going to produce weird +results.</p> + +</article> +<footer> + <aside class="sponsor"><p>I'd love it if you <a class="em" + href="/sponsor/">sponsored me</a>. It will allow me to continue + <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux + ecosystem. Thanks!</p></aside> + +<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p> +<p>This page is licensed under the <a href="http://www.wtfpl.net/txt/copying/">WTFPL-2</a> license.</p> +</footer> +</body> +</html> |