summaryrefslogtreecommitdiff
path: root/include/ulib/stdio.h
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-01-02 10:09:37 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-01-02 10:09:37 +0800
commit1c8e37f63d413a559825020289178d442537449e (patch)
tree9779a712b5eec91035272e7646eb6811979d7eab /include/ulib/stdio.h
parentd8eaa13f2efc1eeca4e5f230d5a2d535aaf27338 (diff)
downloadlume-1c8e37f63d413a559825020289178d442537449e.tar.gz
lume-1c8e37f63d413a559825020289178d442537449e.tar.xz
dev(sell): add simple libc and implement shell
please see the log for detail.
Diffstat (limited to 'include/ulib/stdio.h')
-rw-r--r--include/ulib/stdio.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/include/ulib/stdio.h b/include/ulib/stdio.h
new file mode 100644
index 0000000..2e19b87
--- /dev/null
+++ b/include/ulib/stdio.h
@@ -0,0 +1,97 @@
+/* Standard I/O Library for Lume OS */
+
+#ifndef _STDIO_H
+#define _STDIO_H
+
+#include <stdarg.h>
+#include "ulib/types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*Type Definition (Adjusted According to Architecture)*/
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+/*Macro definition*/
+#define EOF (-1)
+
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+
+#define BUFSIZ 1024
+
+
+/* FILE structure */
+typedef struct
+{
+ int fd;
+ int flags;
+ int error;
+ int eof;
+
+ char buffer[BUFSIZ];
+
+ int buf_write_pos;
+
+ int buf_read_pos;
+ int buf_read_cnt;
+
+ int buf_mode;
+} FILE;
+
+/* standard stream object */
+extern FILE *stdin;
+extern FILE *stdout;
+extern FILE *stderr;
+
+/* Function Declaration */
+
+/* File Operations */
+FILE *fopen(const char *filename, const char *mode);
+int fclose(FILE *stream);
+int fflush(FILE *stream); // Not implement
+
+/* Formatted input and output */
+int printf(const char *format, ...);
+int scanf(const char *format, ...);
+int sprintf(char *str, const char *format, ...);
+int snprintf(char *str, uint64 size, const char *format, ...);
+int vsnprintf(char *str, uint64 size, const char *format, va_list ap);
+int sscanf(const char *str, const char *format, ...);
+
+int fprintf(FILE *stream, const char *format, ...);
+int fscanf(FILE *stream, const char *format, ...);
+
+/* Character/String Read and Write */
+int fputc(int c, FILE *stream);
+int fputs(const char *s, FILE *stream);
+int fgetc(FILE *stream);
+char *fgets(char *str, int n, FILE *stream);
+int ungetc(int c, FILE *stream);
+
+/* Common Macros/Wrapper Functions */
+#define getchar() fgetc(stdin)
+#define putchar(c) fputc((c), stdout)
+
+/* Binary read and write */
+uint64 fread(void *ptr, uint64 size, uint64 nmemb, FILE *stream);
+uint64 fwrite(const void *ptr, uint64 size, uint64 nmemb, FILE *stream);
+
+/* File location */
+int fseek(FILE *stream, long offset, int whence);
+long ftell(FILE *stream);
+void rewind(FILE *stream);
+
+/* Status Inquiry */
+int feof(FILE *stream);
+int ferror(FILE *stream);
+void clearerr(FILE *stream);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _STDIO_H */ \ No newline at end of file