From 75081c63ee8b204a239572a232d50455556882f4 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 21 Mar 2016 01:55:24 -0400 Subject: Go ahead and add the generated files. So I know about regressions. --- public/fd_printf.html | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 public/fd_printf.html (limited to 'public/fd_printf.html') diff --git a/public/fd_printf.html b/public/fd_printf.html new file mode 100644 index 0000000..f875078 --- /dev/null +++ b/public/fd_printf.html @@ -0,0 +1,47 @@ + + + + + `dprintf`: print formatted text directly to a file descriptor — Luke Shumaker + + + +
Luke Shumaker » blog » fd_printf
+
+

dprintf: print formatted text directly to a file descriptor

+

This already existed as dprintf(3). I now feel stupid for having Implemented fd_printf.

+

The original post is as follows:

+
+

I wrote this while debugging some code, and thought it might be useful to others:

+
#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;
+}
+

It is a version of printf that prints to a file descriptor—where fprintf prints to a FILE* data structure.

+

The appeal of this is that FILE* I/O is buffered—which means mixing it with raw file descriptor I/O is going to produce weird results.

+ +
+ + + -- cgit v1.2.3