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

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

?? readproc.c

?? linux下獲取一些環境信息的代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * New Interface to Process Table -- PROCTAB Stream (a la Directory streams) * Copyright (C) 1996 Charles L. Blake. * Copyright (C) 1998 Michael K. Johnson * Copyright 1998-2003 Albert Cahalan * May be distributed under the conditions of the * GNU Library General Public License; a copy is in COPYING */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "version.h"#include "readproc.h"#include "alloc.h"#include "pwcache.h"#include "devname.h"#include "procps.h"#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <stdarg.h>#include <string.h>#include <unistd.h>#include <signal.h>#include <fcntl.h>#include <sys/dir.h>#include <sys/types.h>#include <sys/stat.h>// sometimes it's easier to do this manually, w/o gcc helping#ifdef PROFextern void __cyg_profile_func_enter(void*,void*);#define ENTER(x) __cyg_profile_func_enter((void*)x,(void*)x)#define LEAVE(x) __cyg_profile_func_exit((void*)x,(void*)x)#else#define ENTER(x)#define LEAVE(x)#endif// convert hex string to unsigned long longstatic unsigned long long unhex(const char *restrict cp){    unsigned long long ull = 0;    for(;;){        char c = *cp++;        if(unlikely(c<0x30)) break;        ull = (ull<<4) | (c - (c>0x57) ? 0x57 : 0x30) ;    }    return ull;}static int task_dir_missing;///////////////////////////////////////////////////////////////////////////typedef struct status_table_struct {    unsigned char name[7];        // /proc/*/status field name    unsigned char len;            // name length#ifdef LABEL_OFFSET    long offset;                  // jump address offset#else    void *addr;#endif} status_table_struct;#ifdef LABEL_OFFSET#define F(x) {#x, sizeof(#x)-1, (long)(&&case_##x-&&base)},#else#define F(x) {#x, sizeof(#x)-1, &&case_##x},#endif#define NUL  {"", 0, 0},// Derived from:// gperf -7 --language=ANSI-C --key-positions=1,3,4 -C -n -c sml.gperf//// Suggested method:// Grep this file for "case_", then strip those down to the name.// (leave the colon and newline) So "Pid:\n" and "Threads:\n"// would be lines in the file. (no quote, no escape, etc.)//// Watch out for name size in the status_table_struct (grrr, expanding)// and the number of entries (we mask with 63 for now). The table// must be padded out to 64 entries, maybe 128 in the future.static void status2proc(char *S, proc_t *restrict P, int is_proc){    long Threads = 0;    long Tgid = 0;    long Pid = 0;  static const unsigned char asso[] =    {      61, 61, 61, 61, 61, 61, 61, 61, 61, 61,      61, 61, 61, 61, 61, 61, 61, 61, 61, 61,      61, 61, 61, 61, 61, 61, 61, 61, 61, 61,      61, 61, 61, 61, 61, 61, 61, 61, 61, 61,      61, 61, 61, 61, 61, 61, 61, 61, 61, 61,      61, 61, 61, 61, 61, 61, 61, 61, 15, 61,      61, 61, 61, 61, 61, 61, 30,  3,  5,  5,      61,  5, 61,  8, 61, 61,  3, 61, 10, 61,       6, 61, 13,  0, 30, 25,  0, 61, 61, 61,      61, 61, 61, 61, 61, 61, 61,  3, 61, 13,       0,  0, 61, 30, 61, 25, 61, 61, 61,  0,      61, 61, 61, 61,  5, 61,  0, 61, 61, 61,       0, 61, 61, 61, 61, 61, 61, 61    };    static const status_table_struct table[] = {      F(VmStk)      NUL NUL      F(State)      NUL      F(VmExe)      F(ShdPnd)      NUL      F(VmData)      NUL      F(Name)      NUL NUL      F(VmRSS)      NUL NUL      F(VmLck)      NUL NUL NUL      F(Gid)      F(Pid)      NUL NUL NUL      F(VmSize)      NUL NUL      F(VmLib)      NUL NUL      F(PPid)      NUL      F(SigCgt)      NUL      F(Threads)      F(SigPnd)      NUL      F(SigIgn)      NUL      F(Uid)      NUL NUL NUL NUL NUL NUL NUL NUL NUL      NUL NUL NUL NUL NUL      F(Tgid)      NUL NUL NUL NUL      F(SigBlk)      NUL NUL NUL    };#undef F#undef NULENTER(0x220);    P->vm_size = 0;    P->vm_lock = 0;    P->vm_rss  = 0;    P->vm_data = 0;    P->vm_stack= 0;    P->vm_exe  = 0;    P->vm_lib  = 0;    P->nlwp    = 0;    P->signal[0] = '\0';  // so we can detect it as missing for very old kernels    goto base;    for(;;){        char *colon;        status_table_struct entry;        // advance to next line        S = strchr(S, '\n');        if(unlikely(!S)) break;  // if no newline        S++;        // examine a field name (hash and compare)    base:        if(unlikely(!*S)) break;        entry = table[63 & (asso[S[3]] + asso[S[2]] + asso[S[0]])];        colon = strchr(S, ':');        if(unlikely(!colon)) break;        if(unlikely(colon[1]!='\t')) break;        if(unlikely(colon-S != entry.len)) continue;        if(unlikely(memcmp(entry.name,S,colon-S))) continue;        S = colon+2; // past the '\t'#ifdef LABEL_OFFSET        goto *(&&base + entry.offset);#else        goto *entry.addr;#endif    case_Name:{        unsigned u = 0;        while(u < sizeof P->cmd - 1u){            int c = *S++;            if(unlikely(c=='\n')) break;            if(unlikely(c=='\0')) break; // should never happen            if(unlikely(c=='\\')){                c = *S++;                if(c=='\n') break; // should never happen                if(!c)      break; // should never happen                if(c=='n') c='\n'; // else we assume it is '\\'            }            P->cmd[u++] = c;        }        P->cmd[u] = '\0';        S--;   // put back the '\n' or '\0'        continue;    }#ifdef SIGNAL_STRING    case_ShdPnd:        memcpy(P->signal, S, 16);        P->signal[16] = '\0';        continue;    case_SigBlk:        memcpy(P->blocked, S, 16);        P->blocked[16] = '\0';        continue;    case_SigCgt:        memcpy(P->sigcatch, S, 16);        P->sigcatch[16] = '\0';        continue;    case_SigIgn:        memcpy(P->sigignore, S, 16);        P->sigignore[16] = '\0';        continue;    case_SigPnd:        memcpy(P->_sigpnd, S, 16);        P->_sigpnd[16] = '\0';        continue;#else    case_ShdPnd:        P->signal = unhex(S);        continue;    case_SigBlk:        P->blocked = unhex(S);        continue;    case_SigCgt:        P->sigcatch = unhex(S);        continue;    case_SigIgn:        P->sigignore = unhex(S);        continue;    case_SigPnd:        P->_sigpnd = unhex(S);        continue;#endif    case_State:        P->state = *S;        continue;    case_Tgid:        Tgid = strtol(S,&S,10);        continue;    case_Pid:        Pid = strtol(S,&S,10);        continue;    case_PPid:        P->ppid = strtol(S,&S,10);        continue;    case_Threads:        Threads = strtol(S,&S,10);        continue;    case_Uid:        P->ruid = strtol(S,&S,10);        P->euid = strtol(S,&S,10);        P->suid = strtol(S,&S,10);        P->fuid = strtol(S,&S,10);        continue;    case_Gid:        P->rgid = strtol(S,&S,10);        P->egid = strtol(S,&S,10);        P->sgid = strtol(S,&S,10);        P->fgid = strtol(S,&S,10);        continue;    case_VmData:        P->vm_data = strtol(S,&S,10);        continue;    case_VmExe:        P->vm_exe = strtol(S,&S,10);        continue;    case_VmLck:        P->vm_lock = strtol(S,&S,10);        continue;    case_VmLib:        P->vm_lib = strtol(S,&S,10);        continue;    case_VmRSS:        P->vm_rss = strtol(S,&S,10);        continue;    case_VmSize:        P->vm_size = strtol(S,&S,10);        continue;    case_VmStk:        P->vm_stack = strtol(S,&S,10);        continue;    }#if 0    // recent kernels supply per-tgid pending signals    if(is_proc && *ShdPnd){	memcpy(P->signal, ShdPnd, 16);	P->signal[16] = '\0';    }#endif    // recent kernels supply per-tgid pending signals#ifdef SIGNAL_STRING    if(!is_proc || !P->signal[0]){	memcpy(P->signal, P->_sigpnd, 16);	P->signal[16] = '\0';    }#else    if(!is_proc || !have_process_pending){	P->signal = P->_sigpnd;    }#endif    // Linux 2.4.13-pre1 to max 2.4.xx have a useless "Tgid"    // that is not initialized for built-in kernel tasks.    // Only 2.6.0 and above have "Threads" (nlwp) info.    if(Threads){       P->nlwp = Threads;       P->tgid = Tgid;     // the POSIX PID value       P->tid  = Pid;      // the thread ID    }else{       P->nlwp = 1;       P->tgid = Pid;       P->tid  = Pid;    }LEAVE(0x220);}///////////////////////////////////////////////////////////////////////// Reads /proc/*/stat files, being careful not to trip over processes with// names like ":-) 1 2 3 4 5 6".static void stat2proc(const char* S, proc_t *restrict P) {    unsigned num;    char* tmp;ENTER(0x160);    /* fill in default values for older kernels */    P->processor = 0;    P->rtprio = -1;    P->sched = -1;    P->nlwp = 0;    S = strchr(S, '(') + 1;    tmp = strrchr(S, ')');    num = tmp - S;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道久久a久久精品综合| 国产精品正在播放| 日韩**一区毛片| 国产麻豆9l精品三级站| 91在线免费视频观看| 欧美日本在线一区| 久久人人超碰精品| 亚洲一区二区欧美激情| 国产精品一二三区在线| 欧美色老头old∨ideo| 久久精品一区二区三区四区| 亚洲一区在线观看免费观看电影高清| 美女一区二区久久| 色偷偷久久一区二区三区| 91精品国产综合久久小美女| 国产精品色婷婷| 免费人成黄页网站在线一区二区| 成人av在线观| 国产亚洲自拍一区| 日韩国产欧美在线播放| av中文字幕亚洲| 久久久无码精品亚洲日韩按摩| 亚洲成人一区二区| www.一区二区| 国产精品久久夜| 成人丝袜视频网| 久久久久久97三级| 国产主播一区二区| 日本电影亚洲天堂一区| 国产亚洲欧美日韩在线一区| 天堂午夜影视日韩欧美一区二区| 97se亚洲国产综合自在线| 久久免费偷拍视频| 毛片av中文字幕一区二区| 在线观看一区不卡| 国产日韩亚洲欧美综合| 狠狠色丁香久久婷婷综合丁香| 欧美丝袜丝交足nylons| 中文字幕色av一区二区三区| bt欧美亚洲午夜电影天堂| 国产欧美中文在线| 国产成人亚洲综合a∨婷婷图片| 精品国产91乱码一区二区三区| 亚洲福利国产精品| 欧美日韩免费不卡视频一区二区三区| 中文字幕亚洲成人| 成人av片在线观看| 国产精品美日韩| 色综合天天做天天爱| 中文字幕一区二区三区蜜月| 99久久国产综合精品色伊| 国产精品久久久99| 91一区二区在线| 亚洲精品国产一区二区精华液 | 国产精品免费视频一区| 99久久婷婷国产综合精品| 一区二区三区精品视频| 欧美精品一二三| 免费成人在线播放| 国产精品久久久久7777按摩 | 久久超碰97中文字幕| 日韩欧美区一区二| 精品亚洲porn| 国产日韩欧美精品一区| eeuss影院一区二区三区| 1区2区3区精品视频| 日本黄色一区二区| 丝袜国产日韩另类美女| 精品国产91洋老外米糕| 99re这里只有精品首页| 一级精品视频在线观看宜春院 | 亚洲愉拍自拍另类高清精品| 欧美午夜理伦三级在线观看| 日本一区二区三区视频视频| 国产成人精品一区二区三区四区| 精品少妇一区二区三区在线视频| 懂色av中文字幕一区二区三区| 久久久久国产精品麻豆ai换脸| 不卡的av网站| 玉米视频成人免费看| 欧美性一级生活| 亚洲国产一区二区三区| 91精品蜜臀在线一区尤物| 麻豆91在线播放| 国产精品视频第一区| 在线视频观看一区| 麻豆成人在线观看| 中文天堂在线一区| 欧美午夜精品一区二区三区| 久久99国内精品| 国产精品久久久久久久久晋中| 91久久精品日日躁夜夜躁欧美| 日本亚洲电影天堂| 国产日韩欧美综合在线| 欧美日韩美女一区二区| 国产主播一区二区三区| 亚洲免费伊人电影| 欧美xxxxxxxxx| 色屁屁一区二区| 九色porny丨国产精品| 中文字幕一区二区三区四区不卡 | 日韩av在线播放中文字幕| 国产精品视频九色porn| 日韩亚洲欧美高清| 91在线看国产| 国产一区二区三区美女| 天天影视色香欲综合网老头| 国产精品动漫网站| 久久久精品影视| 日韩欧美成人一区| 欧美日韩国产一二三| www.亚洲在线| 国内偷窥港台综合视频在线播放| 国内成人自拍视频| 亚洲二区视频在线| 亚洲免费观看高清| 日本一区二区三区四区| 2017欧美狠狠色| 日韩精品中文字幕一区| 欧美日本视频在线| 欧美无乱码久久久免费午夜一区| 99re这里只有精品视频首页| 国产激情一区二区三区桃花岛亚洲| 日韩中文欧美在线| 五月婷婷综合激情| 亚洲成人动漫一区| 亚洲va天堂va国产va久| 国产精品久久二区二区| 亚洲欧美在线另类| 国产精品成人免费精品自在线观看| 久久精品视频在线看| 久久久精品欧美丰满| 久久综合久久综合久久| 久久中文娱乐网| 久久久亚洲欧洲日产国码αv| 国产精品久久久久久妇女6080| 亚洲精品日日夜夜| 午夜日韩在线电影| 蜜臀久久99精品久久久画质超高清| 午夜不卡av在线| 蜜臀av亚洲一区中文字幕| 奇米色777欧美一区二区| 奇米影视在线99精品| 国内精品免费**视频| 国产精品系列在线观看| 成人18视频在线播放| 91麻豆精东视频| 在线成人免费视频| 日韩欧美一二区| 国产色婷婷亚洲99精品小说| 国产精品国产三级国产aⅴ原创| 亚洲乱码中文字幕| 日韩av在线免费观看不卡| 国产一区二区美女| 97aⅴ精品视频一二三区| 欧美日韩国产一级| 亚洲精品国产视频| 首页国产欧美日韩丝袜| 老司机一区二区| www.欧美日韩| 欧美日韩国产另类不卡| 精品电影一区二区三区| 一区二区三区国产| 国产乱码字幕精品高清av| 91色综合久久久久婷婷| 51久久夜色精品国产麻豆| 国产日韩三级在线| 午夜精品久久久| 国产精品一色哟哟哟| 91福利区一区二区三区| 日韩久久久久久| 一区二区三区在线高清| 九九**精品视频免费播放| 99久久99久久综合| 欧美一级久久久久久久大片| 国产精品高潮呻吟久久| 全国精品久久少妇| 色综合天天综合狠狠| 精品国产91乱码一区二区三区| 伊人性伊人情综合网| 精品亚洲aⅴ乱码一区二区三区| 色综合视频在线观看| 日韩精品一区二| 亚洲va中文字幕| 99麻豆久久久国产精品免费| 日韩欧美在线网站| 一区二区视频免费在线观看| 久久99久久精品欧美| 欧美性一级生活| 国产精品免费观看视频| 久久99精品久久久久久| 欧美影视一区在线| 一区二区成人在线| 91福利小视频| 亚洲国产综合色| 色系网站成人免费| 亚洲视频每日更新| 国产伦精品一区二区三区视频青涩| 91在线视频观看| 精品美女被调教视频大全网站|