⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itimer.c

📁 linux1.1源代码
💻 C
字号:
/* * linux/kernel/itimer.c * * Copyright (C) 1992 Darren Senn *//* These are all the functions necessary to implement itimers */#include <linux/signal.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/errno.h>#include <linux/time.h>#include <asm/segment.h>static unsigned long tvtojiffies(struct timeval *value){	return((unsigned long )value->tv_sec * HZ +		(unsigned long )(value->tv_usec + (1000000 / HZ - 1)) /		(1000000 / HZ));}static void jiffiestotv(unsigned long jiffies, struct timeval *value){	value->tv_usec = (jiffies % HZ) * (1000000 / HZ);	value->tv_sec = jiffies / HZ;	return;}int _getitimer(int which, struct itimerval *value){	register unsigned long val, interval;	switch (which) {	case ITIMER_REAL:		val = current->it_real_value;		interval = current->it_real_incr;		break;	case ITIMER_VIRTUAL:		val = current->it_virt_value;		interval = current->it_virt_incr;		break;	case ITIMER_PROF:		val = current->it_prof_value;		interval = current->it_prof_incr;		break;	default:		return(-EINVAL);	}	jiffiestotv(val, &value->it_value);	jiffiestotv(interval, &value->it_interval);	return(0);}asmlinkage int sys_getitimer(int which, struct itimerval *value){	int error;	struct itimerval get_buffer;	if (!value)		return -EFAULT;	error = _getitimer(which, &get_buffer);	if (error)		return error;	error = verify_area(VERIFY_WRITE, value, sizeof(struct itimerval));	if (error)		return error;	memcpy_tofs(value, &get_buffer, sizeof(get_buffer));	return 0;}int _setitimer(int which, struct itimerval *value, struct itimerval *ovalue){	register unsigned long i, j;	int k;	i = tvtojiffies(&value->it_interval);	j = tvtojiffies(&value->it_value);	if (ovalue && (k = _getitimer(which, ovalue)) < 0)		return k;	switch (which) {		case ITIMER_REAL:			if (j) {				j += 1+itimer_ticks;				if (j < itimer_next)					itimer_next = j;			}			current->it_real_value = j;			current->it_real_incr = i;			break;		case ITIMER_VIRTUAL:			if (j)				j++;			current->it_virt_value = j;			current->it_virt_incr = i;			break;		case ITIMER_PROF:			if (j)				j++;			current->it_prof_value = j;			current->it_prof_incr = i;			break;		default:			return -EINVAL;	}	return 0;}asmlinkage int sys_setitimer(int which, struct itimerval *value, struct itimerval *ovalue){	int error;	struct itimerval set_buffer, get_buffer;	if (!value)		memset((char *) &set_buffer, 0, sizeof(set_buffer));	else		memcpy_fromfs(&set_buffer, value, sizeof(set_buffer));	error = _setitimer(which, &set_buffer, ovalue ? &get_buffer : 0);	if (error || !ovalue)		return error;	error = verify_area(VERIFY_WRITE, ovalue, sizeof(struct itimerval));	if (!error)		memcpy_tofs(ovalue, &get_buffer, sizeof(get_buffer));	return error;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -