亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sys.c

?? 這學期的os課程設計的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *  linux/kernel/sys.c
 *
 *  Copyright (C) 1991, 1992  Linus Torvalds
 */

#include <linux/mm.h>
#include <linux/utsname.h>
#include <linux/mman.h>
#include <linux/smp_lock.h>
#include <linux/notifier.h>
#include <linux/reboot.h>
#include <linux/prctl.h>

#include <asm/uaccess.h>
#include <asm/io.h>

/*
 * this indicates whether you can reboot with ctrl-alt-del: the default is yes
 */

int C_A_D = 1;


/*
 *	Notifier list for kernel code which wants to be called
 *	at shutdown. This is used to stop any idling DMA operations
 *	and the like. 
 */

struct notifier_block *reboot_notifier_list = NULL;

int register_reboot_notifier(struct notifier_block * nb)
{
	return notifier_chain_register(&reboot_notifier_list, nb);
}

int unregister_reboot_notifier(struct notifier_block * nb)
{
	return notifier_chain_unregister(&reboot_notifier_list, nb);
}



extern void adjust_clock(void);

asmlinkage int sys_ni_syscall(void)
{
	return -ENOSYS;
}

static int proc_sel(struct task_struct *p, int which, int who)
{
	if(p->pid)
	{
		switch (which) {
			case PRIO_PROCESS:
				if (!who && p == current)
					return 1;
				return(p->pid == who);
			case PRIO_PGRP:
				if (!who)
					who = current->pgrp;
				return(p->pgrp == who);
			case PRIO_USER:
				if (!who)
					who = current->uid;
				return(p->uid == who);
		}
	}
	return 0;
}

asmlinkage int sys_setpriority(int which, int who, int niceval)
{
	struct task_struct *p;
	unsigned int priority;
	int error;

	if (which > 2 || which < 0)
		return -EINVAL;

	/* normalize: avoid signed division (rounding problems) */
	error = ESRCH;
	priority = niceval;
	if (niceval < 0)
		priority = -niceval;
	if (priority > 20)
		priority = 20;
	priority = (priority * DEF_PRIORITY + 10) / 20 + DEF_PRIORITY;

	if (niceval >= 0) {
		priority = 2*DEF_PRIORITY - priority;
		if (!priority)
			priority = 1;
	}

	read_lock(&tasklist_lock);
	for_each_task(p) {
		if (!proc_sel(p, which, who))
			continue;
		if (p->uid != current->euid &&
			p->uid != current->uid && !capable(CAP_SYS_NICE)) {
			error = EPERM;
			continue;
		}
		if (error == ESRCH)
			error = 0;
		if (priority > p->priority && !capable(CAP_SYS_NICE))
			error = EACCES;
		else
			p->priority = priority;
	}
	read_unlock(&tasklist_lock);

	return -error;
}

/*
 * Ugh. To avoid negative return values, "getpriority()" will
 * not return the normal nice-value, but a value that has been
 * offset by 20 (ie it returns 0..40 instead of -20..20)
 */
asmlinkage int sys_getpriority(int which, int who)
{
	struct task_struct *p;
	long max_prio = -ESRCH;

	if (which > 2 || which < 0)
		return -EINVAL;

	read_lock(&tasklist_lock);
	for_each_task (p) {
		if (!proc_sel(p, which, who))
			continue;
		if (p->priority > max_prio)
			max_prio = p->priority;
	}
	read_unlock(&tasklist_lock);

	/* scale the priority from timeslice to 0..40 */
	if (max_prio > 0)
		max_prio = (max_prio * 20 + DEF_PRIORITY/2) / DEF_PRIORITY;
	return max_prio;
}


/*
 * Reboot system call: for obvious reasons only root may call it,
 * and even root needs to set up some magic numbers in the registers
 * so that some mistake won't make this reboot the whole machine.
 * You can also set the meaning of the ctrl-alt-del-key here.
 *
 * reboot doesn't sync: do that yourself before calling this.
 */
asmlinkage int sys_reboot(int magic1, int magic2, int cmd, void * arg)
{
	char buffer[256];

	/* We only trust the superuser with rebooting the system. */
	if (!capable(CAP_SYS_BOOT))
		return -EPERM;

	/* For safety, we require "magic" arguments. */
	if (magic1 != LINUX_REBOOT_MAGIC1 ||
	    (magic2 != LINUX_REBOOT_MAGIC2 && magic2 != LINUX_REBOOT_MAGIC2A &&
			magic2 != LINUX_REBOOT_MAGIC2B))
		return -EINVAL;

	lock_kernel();
	switch (cmd) {
	case LINUX_REBOOT_CMD_RESTART:
		notifier_call_chain(&reboot_notifier_list, SYS_RESTART, NULL);
		printk(KERN_EMERG "Restarting system.\n");
		machine_restart(NULL);
		break;

	case LINUX_REBOOT_CMD_CAD_ON:
		C_A_D = 1;
		break;

	case LINUX_REBOOT_CMD_CAD_OFF:
		C_A_D = 0;
		break;

	case LINUX_REBOOT_CMD_HALT:
		notifier_call_chain(&reboot_notifier_list, SYS_HALT, NULL);
		printk(KERN_EMERG "System halted.\n");
		machine_halt();
		do_exit(0);
		break;

	case LINUX_REBOOT_CMD_POWER_OFF:
		notifier_call_chain(&reboot_notifier_list, SYS_POWER_OFF, NULL);
		printk(KERN_EMERG "Power down.\n");
		machine_power_off();
		do_exit(0);
		break;

	case LINUX_REBOOT_CMD_RESTART2:
		if (strncpy_from_user(&buffer[0], (char *)arg, sizeof(buffer) - 1) < 0) {
			unlock_kernel();
			return -EFAULT;
		}
		buffer[sizeof(buffer) - 1] = '\0';

		notifier_call_chain(&reboot_notifier_list, SYS_RESTART, buffer);
		printk(KERN_EMERG "Restarting system with command '%s'.\n", buffer);
		machine_restart(buffer);
		break;

	default:
		unlock_kernel();
		return -EINVAL;
		break;
	};
	unlock_kernel();
	return 0;
}

/*
 * This function gets called by ctrl-alt-del - ie the keyboard interrupt.
 * As it's called within an interrupt, it may NOT sync: the only choice
 * is whether to reboot at once, or just ignore the ctrl-alt-del.
 */
void ctrl_alt_del(void)
{
	if (C_A_D) {
		notifier_call_chain(&reboot_notifier_list, SYS_RESTART, NULL);
		machine_restart(NULL);
	} else
		kill_proc(1, SIGINT, 1);
}
	

/*
 * Unprivileged users may change the real gid to the effective gid
 * or vice versa.  (BSD-style)
 *
 * If you set the real gid at all, or set the effective gid to a value not
 * equal to the real gid, then the saved gid is set to the new effective gid.
 *
 * This makes it possible for a setgid program to completely drop its
 * privileges, which is often a useful assertion to make when you are doing
 * a security audit over a program.
 *
 * The general idea is that a program which uses just setregid() will be
 * 100% compatible with BSD.  A program which uses just setgid() will be
 * 100% compatible with POSIX with saved IDs. 
 *
 * SMP: There are not races, the GIDs are checked only by filesystem
 *      operations (as far as semantic preservation is concerned).
 */
asmlinkage int sys_setregid(gid_t rgid, gid_t egid)
{
	int old_rgid = current->gid;
	int old_egid = current->egid;

	if (rgid != (gid_t) -1) {
		if ((old_rgid == rgid) ||
		    (current->egid==rgid) ||
		    capable(CAP_SETGID))
			current->gid = rgid;
		else
			return -EPERM;
	}
	if (egid != (gid_t) -1) {
		if ((old_rgid == egid) ||
		    (current->egid == egid) ||
		    (current->sgid == egid) ||
		    capable(CAP_SETGID))
			current->fsgid = current->egid = egid;
		else {
			current->gid = old_rgid;
			return -EPERM;
		}
	}
	if (rgid != (gid_t) -1 ||
	    (egid != (gid_t) -1 && egid != old_rgid))
		current->sgid = current->egid;
	current->fsgid = current->egid;
	if (current->egid != old_egid)
		current->dumpable = 0;
	return 0;
}

/*
 * setgid() is implemented like SysV w/ SAVED_IDS 
 *
 * SMP: Same implicit races as above.
 */
asmlinkage int sys_setgid(gid_t gid)
{
	int old_egid = current->egid;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品捆绑美女sm三区| 国产精品拍天天在线| 91免费观看在线| 亚洲美女一区二区三区| 国产欧美久久久精品影院| 精品电影一区二区三区| 日韩欧美色综合网站| 日韩一区二区三区在线视频| 51精品久久久久久久蜜臀| 在线观看视频91| 国产精品三级电影| 在线看国产日韩| 欧美在线观看视频在线| 色综合中文字幕| 日本乱人伦aⅴ精品| 91福利社在线观看| 欧美日韩精品一区二区三区四区| 欧美影视一区二区三区| 在线日韩av片| 在线不卡免费欧美| 日韩欧美一级二级三级久久久| 1区2区3区精品视频| 色综合天天综合网天天看片| 91黄色在线观看| 欧美人动与zoxxxx乱| 国产成a人无v码亚洲福利| 国产jizzjizz一区二区| 97久久精品人人做人人爽| 日本道色综合久久| 欧美日本在线看| 精品国产亚洲一区二区三区在线观看| 久久久91精品国产一区二区精品| 中文字幕一区二区不卡 | 狠狠色2019综合网| 国产麻豆欧美日韩一区| va亚洲va日韩不卡在线观看| 91国产视频在线观看| 欧美一区二区三区的| 国产欧美精品在线观看| 亚洲乱码国产乱码精品精小说| 天天操天天色综合| 狠狠色综合播放一区二区| 国产99久久久久久免费看农村| 一本色道久久加勒比精品 | 日韩一区在线播放| 亚洲午夜激情网站| 精品一区二区三区日韩| 视频一区欧美日韩| 国产伦精品一区二区三区免费 | 制服丝袜国产精品| 国产亚洲精品福利| 亚洲影院在线观看| 国内精品免费在线观看| 一区二区三区四区在线播放| 亚洲最大成人综合| 九九国产精品视频| 日本韩国视频一区二区| 精品国产1区2区3区| 亚洲免费观看视频| 韩国成人精品a∨在线观看| 色一情一伦一子一伦一区| 精品久久久网站| 亚洲国产精品一区二区久久恐怖片| 国产一区二区精品久久| 欧美乱妇一区二区三区不卡视频| 国产精品久久毛片av大全日韩| 看电影不卡的网站| 一本色道**综合亚洲精品蜜桃冫| 欧美精品一区男女天堂| 亚洲va国产天堂va久久en| 成人久久18免费网站麻豆| 国产成人精品在线看| 91精品国产91综合久久蜜臀| 亚洲人成亚洲人成在线观看图片 | 色伊人久久综合中文字幕| 久久久午夜精品| 日韩高清不卡一区二区三区| 9久草视频在线视频精品| 日韩一区日韩二区| 国产福利精品一区二区| 日韩欧美精品在线视频| 亚洲一区二区三区三| 成年人午夜久久久| 久久亚洲精品国产精品紫薇| 琪琪久久久久日韩精品| 欧美午夜一区二区| 综合欧美一区二区三区| 国产精品888| 精品电影一区二区三区| 免费国产亚洲视频| 欧美国产精品一区| 国产精品免费久久久久| 国产资源在线一区| 欧美一区二区三区在线视频| 亚洲v精品v日韩v欧美v专区| 免费观看在线综合色| 欧美片网站yy| 午夜电影网亚洲视频| 欧美午夜精品久久久久久孕妇 | 亚洲免费观看高清| 国产精品免费看片| 亚洲与欧洲av电影| 94-欧美-setu| 亚洲乱码国产乱码精品精的特点| 99re亚洲国产精品| 亚洲欧洲日韩女同| www.在线成人| 1024亚洲合集| 91视频免费看| 一区二区三区中文字幕| 91搞黄在线观看| 亚洲成人免费视| 欧美欧美欧美欧美| 免费av成人在线| 久久天天做天天爱综合色| 久久99精品国产.久久久久久| 欧美一区二区视频观看视频| 国产在线乱码一区二区三区| 久久久噜噜噜久噜久久综合| 亚洲国产精品综合小说图片区| 欧美日韩免费电影| 三级成人在线视频| 日韩欧美卡一卡二| 国产酒店精品激情| 国产精品久久夜| 欧美日韩一区三区四区| 久久国产精品露脸对白| 国产欧美视频在线观看| 国产米奇在线777精品观看| 成人激情免费电影网址| 亚洲视频一区二区免费在线观看| 在线观看亚洲一区| 日韩va亚洲va欧美va久久| 亚洲精品一区二区精华| 99精品久久99久久久久| 亚洲成人久久影院| 日韩欧美国产成人一区二区| 成人三级在线视频| 一区二区三区日韩欧美| 欧美一二三区精品| 国产不卡视频一区二区三区| 一级做a爱片久久| 91精品午夜视频| 国产不卡视频一区二区三区| 亚洲国产精品一区二区www在线| 精品粉嫩aⅴ一区二区三区四区| 91网站在线观看视频| 国产女人aaa级久久久级| 91激情在线视频| 国产乱对白刺激视频不卡| 亚洲免费av网站| 久久在线免费观看| 91亚洲精品久久久蜜桃网站| 另类小说欧美激情| 亚洲欧洲日韩一区二区三区| 日韩欧美aaaaaa| 91麻豆国产福利在线观看| 成人aa视频在线观看| 天堂午夜影视日韩欧美一区二区| 国产亚洲一二三区| 欧美亚洲尤物久久| 国产乱人伦偷精品视频不卡 | 成人激情免费视频| 天天av天天翘天天综合网| 日本一区二区三区在线不卡| 欧美人动与zoxxxx乱| av一区二区不卡| 精一区二区三区| 亚洲成人av一区| 亚洲欧美在线视频观看| 这里只有精品视频在线观看| 91在线无精精品入口| 看电影不卡的网站| 亚洲最新视频在线观看| 国产精品污网站| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲欧美日韩国产综合在线| 久久综合九色综合欧美亚洲| 欧美日韩国产乱码电影| 不卡电影一区二区三区| 极品美女销魂一区二区三区 | 日韩激情av在线| 在线亚洲一区二区| 国产精品久久久99| 久久婷婷成人综合色| 91精品免费在线| 欧美日韩亚洲高清一区二区| 91网址在线看| 91免费看片在线观看| 成人a区在线观看| 国产精品中文字幕一区二区三区| 日韩vs国产vs欧美| 亚洲成人免费视| 亚洲一区在线免费观看| 自拍偷拍欧美激情| 国产亚洲欧美中文| 精品成人佐山爱一区二区| 欧美一区二区免费视频| 欧美丰满嫩嫩电影| 欧美日韩成人高清|