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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sysinfo.c

?? linux下獲取一些環(huán)境信息的代碼
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
// Copyright (C) 1992-1998 by Michael K. Johnson, johnsonm@redhat.com// Copyright 1998-2003 Albert Cahalan//// This file is placed under the conditions of the GNU Library// General Public License, version 2, or any later version.// See file COPYING for information on distribution conditions.//// File for parsing top-level /proc entities. *///// June 2003, Fabian Frederick, disk and slab info#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <locale.h>#include <unistd.h>#include <fcntl.h>#include "version.h"#include "sysinfo.h" /* include self to verify prototypes */#ifndef HZ#include <netinet/in.h>  /* htons */#endiflong smp_num_cpus;     /* number of CPUs */#define BAD_OPEN_MESSAGE					\"Error: /proc must be mounted\n"				\"  To mount /proc at boot you need an /etc/fstab line like:\n"	\"      /proc   /proc   proc    defaults\n"			\"  In the meantime, run \"mount /proc /proc -t proc\"\n"#define STAT_FILE    "/proc/stat"static int stat_fd = -1;#define UPTIME_FILE  "/proc/uptime"static int uptime_fd = -1;#define LOADAVG_FILE "/proc/loadavg"static int loadavg_fd = -1;#define MEMINFO_FILE "/proc/meminfo"static int meminfo_fd = -1;#define VMINFO_FILE "/proc/vmstat"static int vminfo_fd = -1;static char buf[1024];/* This macro opens filename only if necessary and seeks to 0 so * that successive calls to the functions are more efficient. * It also reads the current contents of the file into the global buf. */#define FILE_TO_BUF(filename, fd) do{				\    static int local_n;						\    if (fd == -1 && (fd = open(filename, O_RDONLY)) == -1) {	\	fputs(BAD_OPEN_MESSAGE, stderr);			\	fflush(NULL);						\	_exit(102);						\    }								\    lseek(fd, 0L, SEEK_SET);					\    if ((local_n = read(fd, buf, sizeof buf - 1)) < 0) {	\	perror(filename);					\	fflush(NULL);						\	_exit(103);						\    }								\    buf[local_n] = '\0';					\}while(0)/* evals 'x' twice */#define SET_IF_DESIRED(x,y) do{  if(x) *(x) = (y); }while(0)/***********************************************************************/int uptime(double *restrict uptime_secs, double *restrict idle_secs) {    double up=0, idle=0;    char *restrict savelocale;    FILE_TO_BUF(UPTIME_FILE,uptime_fd);    savelocale = setlocale(LC_NUMERIC, NULL);    setlocale(LC_NUMERIC,"C");    if (sscanf(buf, "%lf %lf", &up, &idle) < 2) {        setlocale(LC_NUMERIC,savelocale);        fputs("bad data in " UPTIME_FILE "\n", stderr);	    return 0;    }    setlocale(LC_NUMERIC,savelocale);    SET_IF_DESIRED(uptime_secs, up);    SET_IF_DESIRED(idle_secs, idle);    return up;	/* assume never be zero seconds in practice */}/*********************************************************************** * Some values in /proc are expressed in units of 1/HZ seconds, where HZ * is the kernel clock tick rate. One of these units is called a jiffy. * The HZ value used in the kernel may vary according to hacker desire. * According to Linus Torvalds, this is not true. He considers the values * in /proc as being in architecture-dependant units that have no relation * to the kernel clock tick rate. Examination of the kernel source code * reveals that opinion as wishful thinking. * * In any case, we need the HZ constant as used in /proc. (the real HZ value * may differ, but we don't care) There are several ways we could get HZ: * * 1. Include the kernel header file. If it changes, recompile this library. * 2. Use the sysconf() function. When HZ changes, recompile the C library! * 3. Ask the kernel. This is obviously correct... * * Linus Torvalds won't let us ask the kernel, because he thinks we should * not know the HZ value. Oh well, we don't have to listen to him. * Someone smuggled out the HZ value. :-) * * This code should work fine, even if Linus fixes the kernel to match his * stated behavior. The code only fails in case of a partial conversion. * * Recent update: on some architectures, the 2.4 kernel provides an * ELF note to indicate HZ. This may be for ARM or user-mode Linux * support. This ought to be investigated. Note that sysconf() is still * unreliable, because it doesn't return an error code when it is * used with a kernel that doesn't support the ELF note. On some other * architectures there may be a system call or sysctl() that will work. */unsigned long long Hertz;static void old_Hertz_hack(void){  unsigned long long user_j, nice_j, sys_j, other_j;  /* jiffies (clock ticks) */  double up_1, up_2, seconds;  unsigned long long jiffies;  unsigned h;  char *restrict savelocale;  savelocale = setlocale(LC_NUMERIC, NULL);  setlocale(LC_NUMERIC, "C");  do{    FILE_TO_BUF(UPTIME_FILE,uptime_fd);  sscanf(buf, "%lf", &up_1);    /* uptime(&up_1, NULL); */    FILE_TO_BUF(STAT_FILE,stat_fd);    sscanf(buf, "cpu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &other_j);    FILE_TO_BUF(UPTIME_FILE,uptime_fd);  sscanf(buf, "%lf", &up_2);    /* uptime(&up_2, NULL); */  } while((long long)( (up_2-up_1)*1000.0/up_1 )); /* want under 0.1% error */  setlocale(LC_NUMERIC, savelocale);  jiffies = user_j + nice_j + sys_j + other_j;  seconds = (up_1 + up_2) / 2;  h = (unsigned)( (double)jiffies/seconds/smp_num_cpus );  /* actual values used by 2.4 kernels: 32 64 100 128 1000 1024 1200 */  switch(h){  case    9 ...   11 :  Hertz =   10; break; /* S/390 (sometimes) */  case   18 ...   22 :  Hertz =   20; break; /* user-mode Linux */  case   30 ...   34 :  Hertz =   32; break; /* ia64 emulator */  case   48 ...   52 :  Hertz =   50; break;  case   58 ...   61 :  Hertz =   60; break;  case   62 ...   65 :  Hertz =   64; break; /* StrongARM /Shark */  case   95 ...  105 :  Hertz =  100; break; /* normal Linux */  case  124 ...  132 :  Hertz =  128; break; /* MIPS, ARM */  case  195 ...  204 :  Hertz =  200; break; /* normal << 1 */  case  253 ...  260 :  Hertz =  256; break;  case  393 ...  408 :  Hertz =  400; break; /* normal << 2 */  case  790 ...  808 :  Hertz =  800; break; /* normal << 3 */  case  990 ... 1010 :  Hertz = 1000; break; /* ARM */  case 1015 ... 1035 :  Hertz = 1024; break; /* Alpha, ia64 */  case 1180 ... 1220 :  Hertz = 1200; break; /* Alpha */  default:#ifdef HZ    Hertz = (unsigned long long)HZ;    /* <asm/param.h> */#else    /* If 32-bit or big-endian (not Alpha or ia64), assume HZ is 100. */    Hertz = (sizeof(long)==sizeof(int) || htons(999)==999) ? 100UL : 1024UL;#endif    fprintf(stderr, "Unknown HZ value! (%d) Assume %Ld.\n", h, Hertz);  }}// same as:   euid != uid || egid != gid#ifndef AT_SECURE#define AT_SECURE      23     // secure mode boolean (true if setuid, etc.)#endif#ifndef AT_CLKTCK#define AT_CLKTCK       17    // frequency of times()#endif#define NOTE_NOT_FOUND 42//extern char** environ;/* for ELF executables, notes are pushed before environment and args */static unsigned long find_elf_note(unsigned long findme){  unsigned long *ep = (unsigned long *)environ;  while(*ep++);  while(*ep){    if(ep[0]==findme) return ep[1];    ep+=2;  }  return NOTE_NOT_FOUND;}int have_privs;static int check_for_privs(void){  unsigned long rc = find_elf_note(AT_SECURE);  if(rc==NOTE_NOT_FOUND){    // not valid to run this code after UID or GID change!    // (if needed, may use AT_UID and friends instead)    rc = geteuid() != getuid() || getegid() != getgid();  }  return !!rc;}static void init_libproc(void) __attribute__((constructor));static void init_libproc(void){  have_privs = check_for_privs();  // ought to count CPUs in /proc/stat instead of relying  // on glibc, which foolishly tries to parse /proc/cpuinfo  //  // SourceForge has an old Alpha running Linux 2.2.20 that  // appears to have a non-SMP kernel on a 2-way SMP box.  // _SC_NPROCESSORS_CONF returns 2, resulting in HZ=512  // _SC_NPROCESSORS_ONLN returns 1, which should work OK  smp_num_cpus = sysconf(_SC_NPROCESSORS_ONLN);  if(smp_num_cpus<1) smp_num_cpus=1; /* SPARC glibc is buggy */  if(linux_version_code > LINUX_VERSION(2, 4, 0)){     Hertz = find_elf_note(AT_CLKTCK);    if(Hertz!=NOTE_NOT_FOUND) return;    fputs("2.4+ kernel w/o ELF notes? -- report this\n", stderr);  }  old_Hertz_hack();}#if 0/*********************************************************************** * The /proc filesystem calculates idle=jiffies-(user+nice+sys) and we * recover jiffies by adding up the 4 or 5 numbers we are given. SMP kernels * (as of pre-2.4 era) can report idle time going backwards, perhaps due * to non-atomic reads and updates. There is no locking for these values. */#ifndef NAN#define NAN (-0.0)#endif#define JT unsigned long longvoid eight_cpu_numbers(double *restrict uret, double *restrict nret, double *restrict sret, double *restrict iret, double *restrict wret, double *restrict xret, double *restrict yret, double *restrict zret){    double tmp_u, tmp_n, tmp_s, tmp_i, tmp_w, tmp_x, tmp_y, tmp_z;    double scale;  /* scale values to % */    static JT old_u, old_n, old_s, old_i, old_w, old_x, old_y, old_z;    JT new_u, new_n, new_s, new_i, new_w, new_x, new_y, new_z;    JT ticks_past; /* avoid div-by-0 by not calling too often :-( */    tmp_w = 0.0;    new_w = 0;    tmp_x = 0.0;    new_x = 0;    tmp_y = 0.0;    new_y = 0;    tmp_z = 0.0;    new_z = 0;     FILE_TO_BUF(STAT_FILE,stat_fd);    sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", &new_u, &new_n, &new_s, &new_i, &new_w, &new_x, &new_y, &new_z);    ticks_past = (new_u+new_n+new_s+new_i+new_w+new_x+new_y+new_z)-(old_u+old_n+old_s+old_i+old_w+old_x+old_y+old_z);    if(ticks_past){      scale = 100.0 / (double)ticks_past;      tmp_u = ( (double)new_u - (double)old_u ) * scale;      tmp_n = ( (double)new_n - (double)old_n ) * scale;      tmp_s = ( (double)new_s - (double)old_s ) * scale;      tmp_i = ( (double)new_i - (double)old_i ) * scale;      tmp_w = ( (double)new_w - (double)old_w ) * scale;      tmp_x = ( (double)new_x - (double)old_x ) * scale;      tmp_y = ( (double)new_y - (double)old_y ) * scale;      tmp_z = ( (double)new_z - (double)old_z ) * scale;    }else{      tmp_u = NAN;      tmp_n = NAN;      tmp_s = NAN;      tmp_i = NAN;      tmp_w = NAN;      tmp_x = NAN;      tmp_y = NAN;      tmp_z = NAN;    }    SET_IF_DESIRED(uret, tmp_u);    SET_IF_DESIRED(nret, tmp_n);    SET_IF_DESIRED(sret, tmp_s);    SET_IF_DESIRED(iret, tmp_i);    SET_IF_DESIRED(wret, tmp_w);    SET_IF_DESIRED(xret, tmp_x);    SET_IF_DESIRED(yret, tmp_y);    SET_IF_DESIRED(zret, tmp_z);    old_u=new_u;    old_n=new_n;    old_s=new_s;    old_i=new_i;    old_w=new_w;    old_x=new_x;    old_y=new_y;    old_z=new_z;}#undef JT#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人av在线| 国产精品一区二区不卡| 久久亚洲一区二区三区明星换脸| 成人免费高清视频| 无吗不卡中文字幕| 久久久久国产精品麻豆ai换脸| 91亚洲资源网| 国产在线精品一区二区夜色 | 日本中文字幕不卡| 国产精品成人在线观看| 欧美成人a∨高清免费观看| 91在线精品一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 亚洲影视在线播放| 日韩一区在线看| 国产欧美一区二区三区在线看蜜臀 | 精品在线播放免费| 午夜电影网亚洲视频| 亚洲欧洲日韩综合一区二区| 国产欧美精品在线观看| 欧美变态tickle挠乳网站| 欧美精品一级二级三级| 91传媒视频在线播放| 成人h动漫精品一区二区| 精品夜夜嗨av一区二区三区| 天天操天天干天天综合网| 亚洲一二三四在线观看| 亚洲色图欧洲色图| 国产精品久久国产精麻豆99网站 | 精品国产亚洲在线| 91精品国产品国语在线不卡| 欧美在线不卡一区| 99国产精品久久久| av激情亚洲男人天堂| 成人免费观看视频| 懂色av一区二区三区蜜臀| 国产精品一区免费在线观看| 精品一区二区三区影院在线午夜| 免费视频最近日韩| 免费成人你懂的| 精品一区二区三区av| 国产一区二区三区久久悠悠色av| 免费在线观看日韩欧美| 日韩中文字幕一区二区三区| 亚洲国产精品自拍| 午夜不卡在线视频| 日韩经典一区二区| 免费黄网站欧美| 韩国av一区二区三区| 国产一区二区电影| 国产盗摄精品一区二区三区在线 | 日本麻豆一区二区三区视频| 奇米精品一区二区三区四区 | 亚洲va国产va欧美va观看| 亚洲综合清纯丝袜自拍| 天天综合色天天| 韩国av一区二区三区在线观看| 国产精品一区二区果冻传媒| aaa亚洲精品| 欧美在线一二三四区| 欧美精选在线播放| 日韩精品一区二区三区老鸭窝 | 精品国产青草久久久久福利| 久久久久久一二三区| 国产精品久久一卡二卡| 亚洲精选视频免费看| 日韩专区欧美专区| 国产乱色国产精品免费视频| av一二三不卡影片| 在线播放91灌醉迷j高跟美女 | 国产欧美一区二区在线| 亚洲激情综合网| 免费成人你懂的| 成人动漫一区二区| 欧美日韩国产一区二区三区地区| 欧美成人午夜电影| 亚洲三级免费电影| 日本伊人午夜精品| 成人av高清在线| 欧美精品久久久久久久久老牛影院 | www.久久精品| 欧美日韩日本视频| 久久精品一区四区| 亚洲第一电影网| 国产传媒久久文化传媒| 在线视频你懂得一区二区三区| 日韩精品一区二区在线观看| 《视频一区视频二区| 久久精品国产网站| 色综合一区二区| 久久综合久久久久88| 一区二区三区av电影 | 国产一区不卡在线| 在线免费一区三区| 国产夜色精品一区二区av| 依依成人精品视频| 国产米奇在线777精品观看| 色婷婷综合久久久中文一区二区| 日韩欧美在线不卡| 亚洲精品成人a在线观看| 国产福利91精品一区| 日韩一级二级三级| 一区二区三国产精华液| 国产不卡在线一区| 制服丝袜亚洲播放| 亚洲精品成人悠悠色影视| 高清shemale亚洲人妖| 欧美一区日韩一区| 有码一区二区三区| 99re热这里只有精品免费视频| 日韩午夜在线影院| 亚洲国产三级在线| 91日韩在线专区| 欧美激情综合网| 国产剧情一区二区| 欧美成人性福生活免费看| 视频一区欧美精品| 欧美性三三影院| 亚洲美女视频在线| 99热精品国产| 欧美高清在线视频| 国产成人免费视频网站高清观看视频| 欧美精品九九99久久| 亚洲一区在线视频| 色又黄又爽网站www久久| 国产精品毛片a∨一区二区三区 | 91麻豆国产自产在线观看| 国产视频视频一区| 国产一区二区三区| 久久中文娱乐网| 久久国产人妖系列| www成人在线观看| 精品一区二区三区免费| 欧美不卡激情三级在线观看| 久久99精品国产麻豆婷婷洗澡| 日韩三级视频在线观看| 麻豆国产欧美一区二区三区| 欧美一级午夜免费电影| 日韩电影在线观看网站| 日韩一区二区三区av| 美女任你摸久久| 精品国产伦一区二区三区免费| 七七婷婷婷婷精品国产| 亚洲精品在线一区二区| 国内精品在线播放| 久久午夜老司机| 粗大黑人巨茎大战欧美成人| 国产精品人妖ts系列视频| 99久久99久久精品国产片果冻| 综合久久给合久久狠狠狠97色| 欧美自拍偷拍一区| 青青草97国产精品免费观看无弹窗版 | 豆国产96在线|亚洲| 国产日韩欧美精品在线| jlzzjlzz亚洲女人18| 亚洲免费观看高清完整版在线观看 | 欧美一区二区美女| 久久99精品国产91久久来源 | 美脚の诱脚舐め脚责91| 欧美成人三级在线| 国产伦精品一区二区三区视频青涩 | 欧美日韩成人综合在线一区二区| 亚洲成av人影院在线观看网| 欧美一区2区视频在线观看| 免费成人av资源网| 国产亚洲人成网站| 91在线porny国产在线看| 亚洲国产精品综合小说图片区| 日韩限制级电影在线观看| 成人亚洲一区二区一| 亚洲欧美综合色| 欧美日韩精品三区| 精久久久久久久久久久| 亚洲欧美日韩国产综合在线| 在线不卡中文字幕播放| 国产一区二区福利| 亚洲综合成人网| 2020国产成人综合网| 99精品视频在线播放观看| 日韩电影免费在线看| 国产日产欧美一区二区三区| 欧美在线播放高清精品| 国产精品综合av一区二区国产馆| 最新热久久免费视频| 这里只有精品99re| 99久久婷婷国产| 精品一区二区三区免费| 尤物av一区二区| 久久久久99精品一区| 欧美日韩免费观看一区三区| 国产福利一区在线| 日韩影院在线观看| 亚洲欧美色一区| 久久精品日韩一区二区三区| 精品视频在线免费| 成人av在线一区二区三区| 激情六月婷婷综合| 午夜电影久久久| 亚洲精品欧美综合四区| 欧美国产综合色视频|