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

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

?? readproc.c

?? linux下獲取一些環境信息的代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    if(unlikely(num >= sizeof P->cmd)) num = sizeof P->cmd - 1;    memcpy(P->cmd, S, num);    P->cmd[num] = '\0';    S = tmp + 2;                 // skip ") "    num = sscanf(S,       "%c "       "%d %d %d %d %d "       "%lu %lu %lu %lu %lu "       "%Lu %Lu %Lu %Lu "  /* utime stime cutime cstime */       "%ld %ld "       "%d "       "%ld "       "%Lu "  /* start_time */       "%lu "       "%ld "       "%lu %"KLF"u %"KLF"u %"KLF"u %"KLF"u %"KLF"u "       "%*s %*s %*s %*s " /* discard, no RT signals & Linux 2.1 used hex */       "%"KLF"u %*lu %*lu "       "%d %d "       "%lu %lu",       &P->state,       &P->ppid, &P->pgrp, &P->session, &P->tty, &P->tpgid,       &P->flags, &P->min_flt, &P->cmin_flt, &P->maj_flt, &P->cmaj_flt,       &P->utime, &P->stime, &P->cutime, &P->cstime,       &P->priority, &P->nice,       &P->nlwp,       &P->alarm,       &P->start_time,       &P->vsize,       &P->rss,       &P->rss_rlim, &P->start_code, &P->end_code, &P->start_stack, &P->kstk_esp, &P->kstk_eip,/*     P->signal, P->blocked, P->sigignore, P->sigcatch,   */ /* can't use */       &P->wchan, /* &P->nswap, &P->cnswap, */  /* nswap and cnswap dead for 2.4.xx and up *//* -- Linux 2.0.35 ends here -- */       &P->exit_signal, &P->processor,  /* 2.2.1 ends with "exit_signal" *//* -- Linux 2.2.8 to 2.5.17 end here -- */       &P->rtprio, &P->sched  /* both added to 2.5.18 */    );    if(!P->nlwp){      P->nlwp = 1;    }LEAVE(0x160);}/////////////////////////////////////////////////////////////////////////static void statm2proc(const char* s, proc_t *restrict P) {    int num;    num = sscanf(s, "%ld %ld %ld %ld %ld %ld %ld",	   &P->size, &P->resident, &P->share,	   &P->trs, &P->lrs, &P->drs, &P->dt);/*    fprintf(stderr, "statm2proc converted %d fields.\n",num); */}static int file2str(const char *directory, const char *what, char *ret, int cap) {    static char filename[80];    int fd, num_read;    sprintf(filename, "%s/%s", directory, what);    fd = open(filename, O_RDONLY, 0);    if(unlikely(fd==-1)) return -1;    num_read = read(fd, ret, cap - 1);    close(fd);    if(unlikely(num_read<=0)) return -1;    ret[num_read] = '\0';    return num_read;}static char** file2strvec(const char* directory, const char* what) {    char buf[2048];	/* read buf bytes at a time */    char *p, *rbuf = 0, *endbuf, **q, **ret;    int fd, tot = 0, n, c, end_of_file = 0;    int align;    sprintf(buf, "%s/%s", directory, what);    fd = open(buf, O_RDONLY, 0);    if(fd==-1) return NULL;    /* read whole file into a memory buffer, allocating as we go */    while ((n = read(fd, buf, sizeof buf - 1)) > 0) {	if (n < (int)(sizeof buf - 1))	    end_of_file = 1;	if (n == 0 && rbuf == 0)	    return NULL;	/* process died between our open and read */	if (n < 0) {	    if (rbuf)		free(rbuf);	    return NULL;	/* read error */	}	if (end_of_file && buf[n-1])		/* last read char not null */	    buf[n++] = '\0';			/* so append null-terminator */	rbuf = xrealloc(rbuf, tot + n);		/* allocate more memory */	memcpy(rbuf + tot, buf, n);		/* copy buffer into it */	tot += n;				/* increment total byte ctr */	if (end_of_file)	    break;    }    close(fd);    if (n <= 0 && !end_of_file) {	if (rbuf) free(rbuf);	return NULL;		/* read error */    }    endbuf = rbuf + tot;			/* count space for pointers */    align = (sizeof(char*)-1) - ((tot + sizeof(char*)-1) & (sizeof(char*)-1));    for (c = 0, p = rbuf; p < endbuf; p++)    	if (!*p)	    c += sizeof(char*);    c += sizeof(char*);				/* one extra for NULL term */    rbuf = xrealloc(rbuf, tot + c + align);	/* make room for ptrs AT END */    endbuf = rbuf + tot;			/* addr just past data buf */    q = ret = (char**) (endbuf+align);		/* ==> free(*ret) to dealloc */    *q++ = p = rbuf;				/* point ptrs to the strings */    endbuf--;					/* do not traverse final NUL */    while (++p < endbuf)     	if (!*p)				/* NUL char implies that */	    *q++ = p+1;				/* next string -> next char */    *q = 0;					/* null ptr list terminator */    return ret;}// warning: interface may changeint read_cmdline(char *restrict const dst, unsigned sz, unsigned pid){    char name[32];    int fd;    unsigned n = 0;    dst[0] = '\0';    snprintf(name, sizeof name, "/proc/%u/cmdline", pid);    fd = open(name, O_RDONLY);    if(fd==-1) return 0;    for(;;){        ssize_t r = read(fd,dst+n,sz-n);        if(r==-1){            if(errno==EINTR) continue;            break;        }        n += r;        if(n==sz) break; // filled the buffer        if(r==0) break;  // EOF    }    close(fd);    if(n){        int i;        if(n==sz) n--;        dst[n] = '\0';        i=n;        while(i--){            int c = dst[i];            if(c<' ' || c>'~') dst[i]=' ';        }    }    return n;}/* These are some nice GNU C expression subscope "inline" functions. * The can be used with arbitrary types and evaluate their arguments * exactly once. *//* Test if item X of type T is present in the 0 terminated list L */#   define XinL(T, X, L) ( {			\	    T  x = (X), *l = (L);		\	    while (*l && *l != x) l++;		\	    *l == x;				\	} )/* Test if item X of type T is present in the list L of length N */#   define XinLN(T, X, L, N) ( {		\	    T x = (X), *l = (L);		\	    int i = 0, n = (N);			\	    while (i < n && l[i] != x) i++;	\	    i < n && l[i] == x;			\	} )//////////////////////////////////////////////////////////////////////////////////// This reads process info from /proc in the traditional way, for one process.// The pid (tgid? tid?) is already in p, and a path to it in path, with some// room to spare.static proc_t* simple_readproc(PROCTAB *restrict const PT, proc_t *restrict const p) {    static struct stat sb;		// stat() buffer    static char sbuf[1024];	// buffer for stat,statm    char *restrict const path = PT->path;    unsigned flags = PT->flags;    if (unlikely(stat(path, &sb) == -1))	/* no such dirent (anymore) */	goto next_proc;    if ((flags & PROC_UID) && !XinLN(uid_t, sb.st_uid, PT->uids, PT->nuid))	goto next_proc;			/* not one of the requested uids */    p->euid = sb.st_uid;			/* need a way to get real uid */    p->egid = sb.st_gid;			/* need a way to get real gid */    if (flags & PROC_FILLSTAT) {         /* read, parse /proc/#/stat */	if (unlikely( file2str(path, "stat", sbuf, sizeof sbuf) == -1 ))	    goto next_proc;			/* error reading /proc/#/stat */	stat2proc(sbuf, p);				/* parse /proc/#/stat */    }    if (unlikely(flags & PROC_FILLMEM)) {	/* read, parse /proc/#/statm */	if (likely( file2str(path, "statm", sbuf, sizeof sbuf) != -1 ))	    statm2proc(sbuf, p);		/* ignore statm errors here */    }						/* statm fields just zero */    if (flags & PROC_FILLSTATUS) {         /* read, parse /proc/#/status */       if (likely( file2str(path, "status", sbuf, sizeof sbuf) != -1 )){           status2proc(sbuf, p, 1);       }    }    // if multithreaded, some values are crap    if(p->nlwp > 1){      p->wchan = (KLONG)~0ull;    }    /* some number->text resolving which is time consuming and kind of insane */    if (flags & PROC_FILLUSR){	memcpy(p->euser,   user_from_uid(p->euid), sizeof p->euser);        if(flags & PROC_FILLSTATUS) {            memcpy(p->ruser,   user_from_uid(p->ruid), sizeof p->ruser);            memcpy(p->suser,   user_from_uid(p->suid), sizeof p->suser);            memcpy(p->fuser,   user_from_uid(p->fuid), sizeof p->fuser);        }    }    /* some number->text resolving which is time consuming and kind of insane */    if (flags & PROC_FILLGRP){        memcpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup);        if(flags & PROC_FILLSTATUS) {            memcpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup);            memcpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup);            memcpy(p->fgroup, group_from_gid(p->fgid), sizeof p->fgroup);        }    }    if ((flags & PROC_FILLCOM) || (flags & PROC_FILLARG))	/* read+parse /proc/#/cmdline */	p->cmdline = file2strvec(path, "cmdline");    else        p->cmdline = NULL;    if (unlikely(flags & PROC_FILLENV))			/* read+parse /proc/#/environ */	p->environ = file2strvec(path, "environ");    else        p->environ = NULL;        return p;next_proc:    return NULL;}//////////////////////////////////////////////////////////////////////////////////// This reads /proc/*/task/* data, for one task.// p is the POSIX process (task group summary) (not needed by THIS implementation)// t is the POSIX thread (task group member, generally not the leader)// path is a path to the task, with some room to spare.static proc_t* simple_readtask(PROCTAB *restrict const PT, const proc_t *restrict const p, proc_t *restrict const t, char *restrict const path) {    static struct stat sb;		// stat() buffer    static char sbuf[1024];	// buffer for stat,statm    unsigned flags = PT->flags;//printf("hhh\n");    if (unlikely(stat(path, &sb) == -1))	/* no such dirent (anymore) */	goto next_task;//    if ((flags & PROC_UID) && !XinLN(uid_t, sb.st_uid, PT->uids, PT->nuid))//	goto next_task;			/* not one of the requested uids */    t->euid = sb.st_uid;			/* need a way to get real uid */    t->egid = sb.st_gid;			/* need a way to get real gid *///printf("iii\n");    if (flags & PROC_FILLSTAT) {         /* read, parse /proc/#/stat */	if (unlikely( file2str(path, "stat", sbuf, sizeof sbuf) == -1 ))	    goto next_task;			/* error reading /proc/#/stat */	stat2proc(sbuf, t);				/* parse /proc/#/stat */    }    if (unlikely(flags & PROC_FILLMEM)) {	/* read, parse /proc/#/statm */#if 0	if (likely( file2str(path, "statm", sbuf, sizeof sbuf) != -1 ))	    statm2proc(sbuf, t);		/* ignore statm errors here */#else	t->size     = p->size;	t->resident = p->resident;	t->share    = p->share;	t->trs      = p->trs;	t->lrs      = p->lrs;	t->drs      = p->drs;	t->dt       = p->dt;#endif    }						/* statm fields just zero */    if (flags & PROC_FILLSTATUS) {         /* read, parse /proc/#/status */       if (likely( file2str(path, "status", sbuf, sizeof sbuf) != -1 )){           status2proc(sbuf, t, 0);       }    }    /* some number->text resolving which is time consuming */    if (flags & PROC_FILLUSR){	memcpy(t->euser,   user_from_uid(t->euid), sizeof t->euser);        if(flags & PROC_FILLSTATUS) {            memcpy(t->ruser,   user_from_uid(t->ruid), sizeof t->ruser);            memcpy(t->suser,   user_from_uid(t->suid), sizeof t->suser);            memcpy(t->fuser,   user_from_uid(t->fuid), sizeof t->fuser);        }    }    /* some number->text resolving which is time consuming */    if (flags & PROC_FILLGRP){        memcpy(t->egroup, group_from_gid(t->egid), sizeof t->egroup);        if(flags & PROC_FILLSTATUS) {            memcpy(t->rgroup, group_from_gid(t->rgid), sizeof t->rgroup);            memcpy(t->sgroup, group_from_gid(t->sgid), sizeof t->sgroup);            memcpy(t->fgroup, group_from_gid(t->fgid), sizeof t->fgroup);        }    }#if 0    if ((flags & PROC_FILLCOM) || (flags & PROC_FILLARG))	/* read+parse /proc/#/cmdline */	t->cmdline = file2strvec(path, "cmdline");    else        t->cmdline = NULL;    if (unlikely(flags & PROC_FILLENV))			/* read+parse /proc/#/environ */	t->environ = file2strvec(path, "environ");    else        t->environ = NULL;#else    t->cmdline = p->cmdline;  // better not free these until done with all threads!    t->environ = p->environ;#endif    t->ppid = p->ppid;  // ought to put the per-task ppid somewhere    return t;next_task:    return NULL;}//////////////////////////////////////////////////////////////////////////////////// This finds processes in /proc in the traditional way.// Return non-zero on success.static int simple_nextpid(PROCTAB *restrict const PT, proc_t *restrict const p) {  static struct direct *ent;		/* dirent handle */  char *restrict const path = PT->path;  for (;;) {    ent = readdir(PT->procfs);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区精密机械公司| 精品国产一区久久| 北条麻妃一区二区三区| 国产成人午夜精品影院观看视频| 日韩—二三区免费观看av| 奇米综合一区二区三区精品视频| 青椒成人免费视频| 韩国av一区二区三区四区| 国产成人av自拍| jlzzjlzz亚洲日本少妇| 色呦呦网站一区| 欧美夫妻性生活| 精品黑人一区二区三区久久| 中文字幕av一区二区三区高| 亚洲欧洲精品一区二区三区不卡| 一区二区三区欧美激情| 日韩精品色哟哟| 国产精品亚洲午夜一区二区三区 | 亚洲少妇30p| 亚洲尤物在线视频观看| 日本va欧美va欧美va精品| 久久国产精品99精品国产| 成人少妇影院yyyy| 欧美日韩在线不卡| 日韩视频一区二区在线观看| 久久久久97国产精华液好用吗| 中文字幕日本乱码精品影院| 亚洲午夜久久久久久久久电影网| 美女视频一区二区三区| 成人免费看视频| 欧美精品久久一区二区三区| 国产日产欧美一区二区三区| 亚洲国产另类av| 高清不卡在线观看av| 欧美人与禽zozo性伦| 国产精品欧美极品| 日本三级亚洲精品| 91美女片黄在线| 日韩精品中文字幕在线一区| 亚洲视频免费在线| 国产酒店精品激情| 欧美日韩美少妇| 亚洲丝袜自拍清纯另类| 国产最新精品精品你懂的| 欧美三级午夜理伦三级中视频| 久久综合国产精品| 日本视频一区二区三区| 欧美在线|欧美| 一区二区中文视频| 国产福利视频一区二区三区| 欧美大胆一级视频| 亚洲成人动漫精品| 在线观看日韩国产| 亚洲女人的天堂| 成人精品高清在线| 久久精品视频在线免费观看| 日本成人在线电影网| 精品1区2区3区| 一区二区三区四区中文字幕| 成人av免费观看| 中文字幕成人av| 粉嫩13p一区二区三区| 久久久噜噜噜久久中文字幕色伊伊 | 欧美日本一区二区三区四区| 中文字幕亚洲精品在线观看| 国产v日产∨综合v精品视频| 久久久国产一区二区三区四区小说| 另类小说视频一区二区| 日韩精品一区二区在线| 三级欧美韩日大片在线看| 欧美日韩国产一区| 日韩激情中文字幕| 欧美一区中文字幕| 奇米在线7777在线精品| 91精品免费观看| 九九国产精品视频| 国产欧美日本一区二区三区| 国产精品亚洲一区二区三区妖精| 日本一区二区在线不卡| 播五月开心婷婷综合| 亚洲欧美在线另类| 色悠悠久久综合| 亚洲国产va精品久久久不卡综合 | 日韩av一二三| 日韩欧美高清dvd碟片| 国产一区999| 国产精品灌醉下药二区| 色综合天天综合色综合av| 亚洲观看高清完整版在线观看| 欧美日韩一区中文字幕| 麻豆精品蜜桃视频网站| 日本一区二区综合亚洲| 色视频欧美一区二区三区| 亚洲成人福利片| 欧美mv和日韩mv国产网站| 高清视频一区二区| 一区二区高清视频在线观看| 欧美人与z0zoxxxx视频| 国产乱子伦视频一区二区三区| 日本一二三不卡| 欧美色图天堂网| 激情深爱一区二区| 亚洲人成伊人成综合网小说| 欧美高清视频在线高清观看mv色露露十八| 午夜精品免费在线| 亚洲国产精品激情在线观看| 欧美日韩一区三区| 国产成人av电影| 日韩1区2区3区| 中文字幕一区二区5566日韩| 6080午夜不卡| 91麻豆高清视频| 国产米奇在线777精品观看| 亚洲精品午夜久久久| 久久综合九色综合97婷婷女人| 91麻豆产精品久久久久久| 免费欧美日韩国产三级电影| 亚洲视频免费在线观看| 精品美女一区二区| 欧美性一二三区| 成人av资源在线| 韩国精品一区二区| 三级久久三级久久| 亚洲精品自拍动漫在线| 久久久高清一区二区三区| 777奇米成人网| 在线观看日韩毛片| av在线播放一区二区三区| 国产麻豆精品视频| 日本麻豆一区二区三区视频| 亚洲午夜三级在线| 亚洲欧美国产三级| 中文字幕在线一区| 中文一区一区三区高中清不卡| 91精品免费观看| 欧美日韩aaa| 91久久精品国产91性色tv| 北条麻妃国产九九精品视频| 韩国女主播一区| 精品在线观看视频| 蜜桃久久久久久| 青青草91视频| 免费欧美在线视频| 视频在线观看一区二区三区| 亚洲成人免费影院| 一区二区激情视频| 亚洲综合一二区| 亚洲国产成人av网| 亚洲综合一区在线| 无码av中文一区二区三区桃花岛| 亚洲电影在线播放| 首页国产欧美久久| 久久草av在线| 国产精品资源站在线| 国产九色sp调教91| 成人少妇影院yyyy| av一二三不卡影片| 色综合久久中文字幕综合网| 色又黄又爽网站www久久| 欧洲另类一二三四区| 欧美日韩久久久久久| 91精品国产高清一区二区三区蜜臀| 这里是久久伊人| 精品国产百合女同互慰| 国产欧美视频在线观看| 中文av字幕一区| 亚洲自拍偷拍综合| 日韩高清国产一区在线| 韩国v欧美v日本v亚洲v| av中文字幕在线不卡| 欧美日韩一本到| 精品国产污污免费网站入口| 国产精品素人一区二区| 亚洲成年人网站在线观看| 日韩精彩视频在线观看| 国产成人免费视频网站高清观看视频| 成人久久视频在线观看| 在线观看日韩高清av| 精品久久久久久综合日本欧美 | 色吊一区二区三区| 欧美精品久久久久久久多人混战| 久久综合一区二区| 亚洲特黄一级片| 蜜桃精品视频在线| 91亚洲国产成人精品一区二区三| 欧美日韩综合在线免费观看| 2019国产精品| 亚洲一区二区三区小说| 国产麻豆精品theporn| 欧美视频在线一区| 亚洲国产精华液网站w| 天天综合天天做天天综合| 成人免费视频播放| 欧美另类videos死尸| 亚洲视频一区二区免费在线观看| 久久丁香综合五月国产三级网站| 99这里都是精品| 精品盗摄一区二区三区| 亚洲愉拍自拍另类高清精品| 高清不卡在线观看|