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

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

?? sysinfo.c

?? linux下獲取一些環境信息的代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
// 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线观看视频一区| 久久久精品综合| 亚洲图片欧美激情| 国产高清在线精品| 26uuu另类欧美| 国产福利不卡视频| 久久精品无码一区二区三区| 激情伊人五月天久久综合| 欧美一区二区三区思思人| 午夜av一区二区| 欧美蜜桃一区二区三区| 麻豆精品国产91久久久久久| 日韩欧美一二三区| 久久国产剧场电影| 欧美成人vps| 成人av电影免费观看| 国产精品色哟哟网站| 成人污视频在线观看| 中文无字幕一区二区三区| 成人激情黄色小说| 国产精品久久影院| 色综合天天综合在线视频| 一区二区三区在线影院| 欧美一区二区三区免费视频| 美国三级日本三级久久99| 日韩精品最新网址| 国产成人综合在线播放| 亚洲精品成人a在线观看| 欧美三级日本三级少妇99| 免费成人av资源网| 久久久不卡网国产精品二区| 一本一道久久a久久精品| 亚洲一区自拍偷拍| 日韩一级完整毛片| 国产精品一线二线三线| 一区二区三区视频在线看| 欧美日韩国产一级二级| 黄色成人免费在线| 国产精品福利一区二区三区| 欧美一区二区在线看| 国产福利精品导航| 亚洲电影一区二区| 久久综合九色综合欧美就去吻| 成人国产亚洲欧美成人综合网| 亚洲小少妇裸体bbw| 粉嫩13p一区二区三区| 一区二区理论电影在线观看| 欧美tk—视频vk| 99精品在线免费| 国产一区二区视频在线| 亚洲三级视频在线观看| 日韩视频在线观看一区二区| 99久久久免费精品国产一区二区| 精品一区二区三区在线观看国产| 国产精品家庭影院| 日韩一二在线观看| 色综合一区二区| 国产 日韩 欧美大片| 日日噜噜夜夜狠狠视频欧美人| 中文字幕欧美区| 欧美精品在线观看一区二区| 91片在线免费观看| 国内精品久久久久影院一蜜桃| 亚洲综合激情小说| 制服丝袜亚洲色图| 在线观看91视频| 成人视屏免费看| 精品无人码麻豆乱码1区2区| 亚洲成人第一页| 亚洲视频在线一区| 中文字幕免费一区| 2024国产精品视频| 精品国免费一区二区三区| 色综合久久天天综合网| 国产成人av福利| 精彩视频一区二区| 亚洲国产日韩精品| 一色屋精品亚洲香蕉网站| 国产午夜亚洲精品不卡| 日韩欧美中文字幕公布| 欧美xingq一区二区| 在线播放欧美女士性生活| 91传媒视频在线播放| jizz一区二区| 91免费版pro下载短视频| 成人夜色视频网站在线观看| 国产精品一区久久久久| 美女精品一区二区| 国产一区在线精品| 狠狠色丁香婷婷综合| 精品一区中文字幕| 国产精品一卡二卡| 国产成人鲁色资源国产91色综 | 91小视频免费看| 国产91精品久久久久久久网曝门 | 久久精品国产在热久久| 日本中文字幕一区二区有限公司| 亚洲国产aⅴ天堂久久| 亚洲综合成人在线视频| 一区二区三区欧美视频| 日本一区二区三区电影| 国产精品日韩精品欧美在线| 亚洲欧美日本韩国| 有坂深雪av一区二区精品| 亚洲精品久久久久久国产精华液| 久久看人人爽人人| 亚洲人成在线播放网站岛国| 亚洲天天做日日做天天谢日日欢 | 精品国一区二区三区| 国产日韩精品一区二区浪潮av | 欧美精品在欧美一区二区少妇| 欧美人妇做爰xxxⅹ性高电影| 欧美日韩一区小说| 久久久久久久精| 国产精品美女一区二区| 亚洲精品乱码久久久久久久久| 自拍视频在线观看一区二区| 亚洲国产精品久久久久秋霞影院| 视频一区二区欧美| 国内精品免费**视频| 国产成人av网站| 在线观看网站黄不卡| 在线播放亚洲一区| 日韩一区二区在线观看视频播放| 26uuu国产日韩综合| 国产精品伦理一区二区| 亚洲一区二区高清| 极品少妇xxxx精品少妇偷拍| 一本一道波多野结衣一区二区| 精品日产卡一卡二卡麻豆| 亚洲欧美激情一区二区| 久久狠狠亚洲综合| 在线免费av一区| 久久久久久夜精品精品免费| 亚洲成人www| 91在线国产福利| 2021中文字幕一区亚洲| 午夜久久电影网| 99久久精品国产一区二区三区| 日韩欧美一区在线| 亚洲最大色网站| 成人动漫在线一区| 日韩精品一区二区三区swag | 久久久精品欧美丰满| 丝袜美腿成人在线| 一本到三区不卡视频| 国产亚洲va综合人人澡精品 | 亚洲精品一区二区精华| 亚洲成在线观看| 色综合天天综合| 中文在线一区二区| 国产精品18久久久久久久久久久久 | 欧美精品欧美精品系列| 亚洲欧美自拍偷拍| 国产激情精品久久久第一区二区| 欧美日本一区二区三区四区| 一区二区三区欧美久久| 成人中文字幕合集| 久久亚洲二区三区| 美国三级日本三级久久99| 欧美精品欧美精品系列| 亚洲影院理伦片| 色88888久久久久久影院按摩 | 欧美www视频| 蜜臀av亚洲一区中文字幕| 欧美精品久久一区二区三区| 亚洲一区二区高清| 欧美日韩三级一区| 午夜精品久久久久久久蜜桃app| 欧美性一区二区| 一区二区三区精品视频| 在线观看三级视频欧美| 亚洲在线一区二区三区| 欧美日韩一区视频| 日韩精品免费视频人成| 欧美一级精品在线| 激情综合色播五月| 欧美精品一区二区三区四区| 国产乱人伦偷精品视频不卡| 中文字幕乱码一区二区免费| 波多野结衣视频一区| 亚洲女人的天堂| 欧美日韩免费视频| 日本亚洲免费观看| 精品欧美黑人一区二区三区| 亚洲精品一二三四区| 99久久国产综合色|国产精品| 中文字幕一区二区三区色视频| 国产精品原创巨作av| 亚洲欧洲日产国码二区| kk眼镜猥琐国模调教系列一区二区 | 中文字幕一区二区三区av| 成人免费毛片a| 亚洲日本乱码在线观看| 色诱视频网站一区| 亚洲午夜视频在线观看| 在线亚洲一区观看| 一个色在线综合| 日韩视频永久免费| 国产精品77777|