📄 sys.c
字号:
#include <errno.h>#include <linux/sched.h>#include <linux/tty.h>#include <linux/kernel.h>#include <asm/segment.h>#include <sys/times.h>#include <sys/utsname.h>int sys_ftime(){ return -ENOSYS;}int sys_mknod(){ return -ENOSYS;}int sys_break(){ return -ENOSYS;}int sys_mount(){ return -ENOSYS;}int sys_umount(){ return -ENOSYS;}int sys_ustat(int dev,struct ustat * ubuf){ return -1;}int sys_ptrace(){ return -ENOSYS;}int sys_stty(){ return -ENOSYS;}int sys_gtty(){ return -ENOSYS;}int sys_rename(){ return -ENOSYS;}int sys_prof(){ return -ENOSYS;}int sys_setgid(int gid){ if (current->euid && current->uid) if (current->gid==gid || current->sgid==gid) current->egid=gid; else return -EPERM; else current->gid=current->egid=gid; return 0;}int sys_acct(){ return -ENOSYS;}int sys_phys(){ return -ENOSYS;}int sys_lock(){ return -ENOSYS;}int sys_mpx(){ return -ENOSYS;}int sys_ulimit(){ return -ENOSYS;}int sys_time(long * tloc){ int i; i = CURRENT_TIME; if (tloc) { verify_area(tloc,4); put_fs_long(i,(unsigned long *)tloc); } return i;}int sys_setuid(int uid){ if (current->euid && current->uid) if (uid==current->uid || current->suid==current->uid) current->euid=uid; else return -EPERM; else current->euid=current->uid=uid; return 0;}int sys_stime(long * tptr){ if (current->euid && current->uid) return -1; startup_time = get_fs_long((unsigned long *)tptr) - jiffies/HZ; return 0;}int sys_times(struct tms * tbuf){ if (!tbuf) return jiffies; verify_area(tbuf,sizeof *tbuf); put_fs_long(current->utime,(unsigned long *)&tbuf->tms_utime); put_fs_long(current->stime,(unsigned long *)&tbuf->tms_stime); put_fs_long(current->cutime,(unsigned long *)&tbuf->tms_cutime); put_fs_long(current->cstime,(unsigned long *)&tbuf->tms_cstime); return jiffies;}int sys_brk(unsigned long end_data_seg){ if (end_data_seg >= current->end_code && end_data_seg < current->start_stack - 16384) current->brk = end_data_seg; return current->brk;}/* * This needs some heave checking ... * I just haven't get the stomach for it. I also don't fully * understand sessions/pgrp etc. Let somebody who does explain it. */int sys_setpgid(int pid, int pgid){ int i; if (!pid) pid = current->pid; if (!pgid) pgid = pid; for (i=0 ; i<NR_TASKS ; i++) if (task[i] && task[i]->pid==pid) { if (task[i]->leader) return -EPERM; if (task[i]->session != current->session) return -EPERM; task[i]->pgrp = pgid; return 0; } return -ESRCH;}int sys_getpgrp(void){ return current->pgrp;}int sys_setsid(void){ if (current->uid && current->euid) return -EPERM; if (current->leader) return -EPERM; current->leader = 1; current->session = current->pgrp = current->pid; current->tty = -1; return current->pgrp;}int sys_uname(struct utsname * name){ static struct utsname thisname = { "linux .0","nodename","release ","version ","machine " }; int i; if (!name) return -1; verify_area(name,sizeof *name); for(i=0;i<sizeof *name;i++) put_fs_byte(((char *) &thisname)[i],i+(char *) name); return (0);}int sys_umask(int mask){ int old = current->umask; current->umask = mask & 0777; return (old);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -