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

📄 idle.c

📁 UNIX、linux密码的破密程序源代码实现
💻 C
字号:
/* * This file is part of John the Ripper password cracker, * Copyright (c) 1996-2001 by Solar Designer */#include <unistd.h>#ifdef _POSIX_PRIORITY_SCHEDULING#include <sched.h>#include <time.h>#include <sys/times.h>static int use_yield = 0;#endif#ifdef __CYGWIN32__extern int nice(int);#endif#ifdef __BEOS__#include <OS.h>#endif#include "params.h"#include "config.h"#include "options.h"#include "signals.h"void idle_init(void){#if defined(_POSIX_PRIORITY_SCHEDULING) && defined(SCHED_IDLE)	struct sched_param param = {0};#endif	if (!cfg_get_bool(SECTION_OPTIONS, NULL, "Idle")) return;	if (options.flags & FLG_STDOUT) return;#ifndef __BEOS__	nice(20);#else	set_thread_priority(getpid(), 1);#endif#if defined(_POSIX_PRIORITY_SCHEDULING) && defined(SCHED_IDLE)	use_yield = sched_setscheduler(getpid(), SCHED_IDLE, &param) != 0;#elif defined(_POSIX_PRIORITY_SCHEDULING)	use_yield = 1;#endif}void idle_yield(void){#ifdef _POSIX_PRIORITY_SCHEDULING	static int calls_per_tick = 0;	static int calls_since_tick = 0;	static int calls_since_adj = 0;	static clock_t last_adj = 0;	clock_t last_check;	clock_t current;	struct tms buf;	if (!use_yield) return;	if (++calls_since_tick < calls_per_tick) return;	calls_since_adj += calls_since_tick;	calls_since_tick = 0;	current = times(&buf);	if (!last_adj) last_adj = current;	if (current - last_adj >= CLK_TCK) {		calls_per_tick = calls_since_adj / (current - last_adj);		calls_since_adj = 0;		last_adj = current;	}	do {		if (event_pending) break;		last_check = current;		sched_yield();		current = times(&buf);	} while (current - last_check > 1 && current - last_adj < CLK_TCK);#endif}

⌨️ 快捷键说明

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