📄 syscalls.c
字号:
#include <sys/types.h>#include <sys/stat.h>#include <sys/syscall.h>#include <_ansi.h>#include <errno.h>#include <fcntl.h>#include <stdarg.h>#include <reent.h>_ssize_t_read_r (struct _reent *r, int fd, void *buf, size_t nbytes){ int err; _ssize_t rc; SYSCALL (SYS_read, rc, err, fd, buf, nbytes); if (err) __errno_r (r) = err; return rc;}_ssize_t_write_r (struct _reent *r, int fd, const void *buf, size_t nbytes){ int err; _ssize_t rc; SYSCALL (SYS_write, rc, err, fd, buf, nbytes); if (err) __errno_r (r) = err; return rc;}/* FIXME: The prototype in <fcntl.h> for open() uses ..., but reent.h uses int. */int_open_r (struct _reent *r, const char *buf, int flags, int mode){ int rc,err;#if 0 int mode; va_list ap; va_start (ap, flags); mode = va_arg (ap, int); va_end (ap);#endif SYSCALL (SYS_open, rc, err, buf, flags, mode); if (err) __errno_r (r) = err; return rc;}int_close_r (struct _reent *r, int fd){ int rc,err; SYSCALL (SYS_close, rc, err, fd, 0, 0); if (err) __errno_r (r) = err; return rc;}off_t_lseek_r (struct _reent *r, int fd, off_t offset, int whence){ int err; off_t rc; SYSCALL (SYS_lseek, rc, err, fd, offset, whence); if (err) __errno_r (r) = err; return rc;}int_fstat_r (struct _reent *r, int fd, struct stat *buf){ int rc,err; SYSCALL (SYS_fstat, rc, err, fd, buf, 0); if (err) __errno_r (r) = err; return rc;}/* FIXME: Shouldn't this be _exit_r? */void_exit (int ret){ int rc,err; SYSCALL (SYS_exit, rc, err, ret, 0, 0); /* If that failed, use an infinite loop. */ while (1) continue;}time_t_time (time_t *timer){ return 0;}int_creat_r (struct _reent *r, const char *path, int mode){ return _open_r (r, path, O_CREAT | O_TRUNC, mode);}int_getpid_r (struct _reent *r){ return 42;}int_kill_r (struct _reent *r, int pid, int sig){ int rc,err; SYSCALL (SYS_kill, rc, err, pid, sig, 0); if (err) __errno_r (r) = err; return rc;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -