kernel

hobby kernel
git clone git://git.evenfri.xyz/kernel.git
Log | Files | Refs | README | LICENSE

syscalls.c (691B)


      1 #include <stddef.h>
      2 #include <dat.h>
      3 
      4 typedef long ssize_t;
      5 
      6 #define syscall3(n, arg1, arg2, arg3) ({ \
      7     long ret; \
      8     asm volatile ( \
      9         "int $0x80" \
     10         : "=a"(ret) \
     11         : "a"(n), "b"(arg1), "c"(arg2), "d"(arg3) \
     12         : "memory" \
     13     ); \
     14     ret; \
     15 })
     16 
     17 size_t write(int fd, void *buf, size_t size) {
     18   long ret = syscall3(sys_write, fd, buf, size);
     19   return ret;
     20 }
     21 
     22 size_t read(int fd, void *buf, size_t size) {
     23   long ret = syscall3(sys_read, fd, buf, size);
     24   return ret;
     25 }
     26 
     27 size_t test_syscall_read() {
     28   char c;
     29   size_t bytes = read(stdin, &c, 1);
     30     
     31   if (bytes > 0) {
     32     write(stdout, &c, 1);
     33   } else {
     34     asm volatile("hlt");
     35   }
     36 
     37   return bytes;
     38 }