Index: uspace/app/tester/Makefile
===================================================================
--- uspace/app/tester/Makefile	(revision 63088cc191f35da85cac7fde793d96d9c3a51615)
+++ uspace/app/tester/Makefile	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -59,4 +59,5 @@
 	console/console1.c \
 	stdio/stdio1.c \
+	stdio/stdio2.c \
 	vfs/vfs1.c
 
Index: uspace/app/tester/stdio/stdio1.def
===================================================================
--- uspace/app/tester/stdio/stdio1.def	(revision 63088cc191f35da85cac7fde793d96d9c3a51615)
+++ uspace/app/tester/stdio/stdio1.def	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -1,5 +1,5 @@
 {
 	"stdio1",
-	"ANSI C streams test",
+	"ANSI C streams reading test",
 	&test_stdio1,
 	true
Index: uspace/app/tester/stdio/stdio2.c
===================================================================
--- uspace/app/tester/stdio/stdio2.c	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
+++ uspace/app/tester/stdio/stdio2.c	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2008 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include "../tester.h"
+
+char * test_stdio2(bool quiet)
+{
+	FILE *f;
+	char *file_name = "/test";
+	size_t n;
+	int c;
+
+	printf("Open file '%s' for writing\n", file_name);
+	errno = 0;
+	f = fopen(file_name, "wt");
+
+	if (f == NULL)
+		return "Failed opening file.";
+
+	fprintf(f, "Integer: %d, string: '%s'\n", 42, "Hello!");
+	if (fclose(f) != 0)
+		return "Failed closing file.";
+
+	printf("Open file '%s' for reading\n", file_name);
+
+	f = fopen(file_name, "rt");
+	if (f == NULL)
+		return "Failed opening file.";
+
+	printf("File contains:\n");
+	while (true) {
+		c = fgetc(f);
+		if (c == EOF) break;
+		putchar(c);
+	}
+
+	if (fclose(f) != 0)
+		return "Failed closing file.";
+
+	return NULL;
+}
Index: uspace/app/tester/stdio/stdio2.def
===================================================================
--- uspace/app/tester/stdio/stdio2.def	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
+++ uspace/app/tester/stdio/stdio2.def	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -0,0 +1,6 @@
+{
+	"stdio2",
+	"ANSI C streams writing test",
+	&test_stdio2,
+	true
+},
Index: uspace/app/tester/tester.c
===================================================================
--- uspace/app/tester/tester.c	(revision 63088cc191f35da85cac7fde793d96d9c3a51615)
+++ uspace/app/tester/tester.c	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -61,4 +61,5 @@
 #include "console/console1.def"
 #include "stdio/stdio1.def"
+#include "stdio/stdio2.def"
 	{NULL, NULL, NULL}
 };
Index: uspace/app/tester/tester.h
===================================================================
--- uspace/app/tester/tester.h	(revision 63088cc191f35da85cac7fde793d96d9c3a51615)
+++ uspace/app/tester/tester.h	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -74,4 +74,5 @@
 extern char * test_console1(bool quiet);
 extern char * test_stdio1(bool quiet);
+extern char * test_stdio2(bool quiet);
 
 extern test_t tests[];
Index: uspace/lib/libc/Makefile
===================================================================
--- uspace/lib/libc/Makefile	(revision 63088cc191f35da85cac7fde793d96d9c3a51615)
+++ uspace/lib/libc/Makefile	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -61,4 +61,5 @@
 	generic/io/io.c \
 	generic/io/printf.c \
+	generic/io/fprintf.c \
 	generic/io/stdio.c \
 	generic/io/stream.c \
Index: uspace/lib/libc/generic/io/fprintf.c
===================================================================
--- uspace/lib/libc/generic/io/fprintf.c	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
+++ uspace/lib/libc/generic/io/fprintf.c	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2008 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ * @brief fprintf, vfprintf
+ */ 
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <io/printf_core.h>
+
+static int vfprintf_write(const char *s, size_t count, void *f)
+{
+	return fwrite(s, 1, count, (FILE *) f);
+}
+
+int vfprintf(FILE *f, const char *fmt, va_list ap)
+{
+	struct printf_spec ps = {
+		(int (*)(void *, size_t, void *)) vfprintf_write,
+		(void *) f
+	};
+
+	return printf_core(fmt, &ps, ap);
+}
+
+int fprintf(FILE *f, const char *fmt, ...)
+{
+	int rv;
+	va_list args;
+
+	va_start(args, fmt);
+	rv = vfprintf(f, fmt, args);
+	va_end(args);
+
+	return rv;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/stdio.c
===================================================================
--- uspace/lib/libc/generic/io/stdio.c	(revision 63088cc191f35da85cac7fde793d96d9c3a51615)
+++ uspace/lib/libc/generic/io/stdio.c	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -43,4 +43,6 @@
 #include <bool.h>
 #include <stdio.h>
+
+FILE *stdin, *stdout, *stderr;
 
 /**
Index: uspace/lib/libc/include/stdio.h
===================================================================
--- uspace/lib/libc/include/stdio.h	(revision 63088cc191f35da85cac7fde793d96d9c3a51615)
+++ uspace/lib/libc/include/stdio.h	(revision 1c1002a59405920f79394ae77cb3e4581d5aa403)
@@ -64,4 +64,6 @@
 } FILE;
 
+extern FILE *stdin, *stdout, *stderr;
+
 extern int getchar(void);
 
@@ -71,5 +73,5 @@
 extern int printf(const char *, ...);
 extern int asprintf(char **, const char *, ...);
-extern int sprintf(char *, const char *fmt, ...);
+extern int sprintf(char *, const char *, ...);
 extern int snprintf(char *, size_t , const char *, ...);
 
@@ -77,6 +79,4 @@
 extern int vsprintf(char *, const char *, va_list);
 extern int vsnprintf(char *, size_t, const char *, va_list);
-
-#define fprintf(f, fmt, ...) printf(fmt, ##__VA_ARGS__)
 
 extern int rename(const char *, const char *);
@@ -90,7 +90,10 @@
 extern void clearerr(FILE *);
 
-extern int fgetc(FILE *);;
+extern int fgetc(FILE *);
 extern int fputc(int, FILE *);
 extern int fputs(const char *, FILE *);
+
+extern int fprintf(FILE *, const char *, ...);
+extern int vfprintf(FILE *, const char *, va_list);
 
 #define getc fgetc
