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

📄 common.h

📁 linux下获取一些环境信息的代码
💻 H
字号:
/* * Copyright 1998-2002 by Albert Cahalan; all rights resered.          * This file may be used subject to the terms and conditions of the * GNU Library General Public License Version 2, or any later version   * at your option, as published by the Free Software Foundation. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. */#ifndef PROCPS_PS_H#define PROCPS_PS_H#include "../proc/procps.h"#include "../proc/escape.h"#include "../proc/readproc.h"#if 0#define trace(args...) printf(## args)#else#define trace(args...)#endif/***************** GENERAL DEFINE ********************//* selection list */#define SEL_RUID 1#define SEL_EUID 2#define SEL_SUID 3#define SEL_FUID 4#define SEL_RGID 5#define SEL_EGID 6#define SEL_SGID 7#define SEL_FGID 8#define SEL_PGRP 9#define SEL_PID  10#define SEL_TTY  11#define SEL_SESS 12#define SEL_COMM 13#define SEL_PPID 14/* Since an enum could be smashed by a #define, it would be bad. */#define U98  0 /* Unix98 standard */    /* This must be 0 */#define XXX  1 /* Common extension */#define DEC  2 /* Digital Unix */#define AIX  3 /* AIX */#define SCO  4 /* SCO */#define LNX  5 /* Linux original :-) */#define BSD  6 /* FreeBSD and OpenBSD */#define SUN  7 /* SunOS 5 (Solaris) */#define HPU  8 /* HP-UX */#define SGI  9 /* Irix */#define SOE 10 /* IBM's S/390 OpenEdition */#define TST 11 /* test code *//* * Try not to overflow the output buffer: *    32 pages for env+cmd *    64 kB pages on IA-64 *    4 chars for "\377", or 1 when mangling to '?'  (ESC_STRETCH) *    plus some slack for other stuff * That is about 8.5 MB on IA-64, or 0.6 MB on i386 * * Sadly, current kernels only supply one page of env/command data. * The buffer is now protected with a guard page, and via other means * to avoid hitting the guard page. *//* output buffer size */#define OUTBUF_SIZE (2 * 64*1024 * ESC_STRETCH)/******************* PS DEFINE *******************/// Column flags// Justification control for flags field comes first.#define CF_JUST_MASK                0x0f//      CF_AIXHACK                     0#define CF_USER                        1 // left if text, right if numeric#define CF_LEFT                        2#define CF_RIGHT                       3#define CF_UNLIMITED                   4#define CF_WCHAN                       5 // left if text, right if numeric#define CF_SIGNAL                      6 // right in 9, or 16 if screen_cols>107// Then the other flags#define CF_PIDMAX             0x00000010 // react to pid_max// Only one allowed; use separate bits to catch errors.#define CF_PRINT_THREAD_ONLY  0x10000000#define CF_PRINT_PROCESS_ONLY 0x20000000#define CF_PRINT_EVERY_TIME   0x40000000#define CF_PRINT_AS_NEEDED    0x80000000 // means we have no clue, so assume EVERY TIME#define CF_PRINT_MASK         0xf0000000#define needs_for_select (PROC_FILLSTAT | PROC_FILLSTATUS)/* thread_flags */#define TF_B_H         0x0001#define TF_B_m         0x0002#define TF_U_m         0x0004#define TF_U_T         0x0008#define TF_U_L         0x0010#define TF_show_proc   0x0100  // show the summary line#define TF_show_task   0x0200  // show the per-thread lines#define TF_show_both   0x0400  // distinct proc/task format lists#define TF_loose_tasks 0x0800  // let sorting break up task groups (BSDish)#define TF_no_sort     0x1000  // don't know if thread-grouping should survive a sort#define TF_no_forest   0x2000  // don't see how to do threads w/ forest option#define TF_must_use    0x4000  // options only make sense if LWP/SPID column added/* personality control flags */#define PER_BROKEN_o      0x0001#define PER_BSD_h         0x0002#define PER_BSD_m         0x0004#define PER_IRIX_l        0x0008#define PER_FORCE_BSD     0x0010#define PER_GOOD_o        0x0020#define PER_OLD_m         0x0040#define PER_NO_DEFAULT_g  0x0080#define PER_ZAP_ADDR      0x0100#define PER_SANE_USER     0x0200#define PER_HPUX_x        0x0400#define PER_SVR4_x        0x0800#define PER_BSD_COLS      0x1000#define PER_UNIX_COLS     0x2000/* Simple selections by bit mask */#define SS_B_x 0x01#define SS_B_g 0x02#define SS_U_d 0x04#define SS_U_a 0x08#define SS_B_a 0x10/* predefined format flags such as:  -l -f l u s -j */#define FF_Uf 0x0001 /* -f */#define FF_Uj 0x0002 /* -j */#define FF_Ul 0x0004 /* -l */#define FF_Bj 0x0008 /* j */#define FF_Bl 0x0010 /* l */#define FF_Bs 0x0020 /* s */#define FF_Bu 0x0040 /* u */#define FF_Bv 0x0080 /* v */#define FF_LX 0x0100 /* X */#define FF_Lm 0x0200 /* m */  /* overloaded: threads, sort, format */#define FF_Fc 0x0400 /* --context */  /* Flask security context format *//* predefined format modifier flags such as:  -l -f l u s -j */#define FM_c 0x0001 /* -c */#define FM_j 0x0002 /* -j */  /* only set when !sysv_j_format */#define FM_y 0x0004 /* -y *///#define FM_L 0x0008 /* -L */#define FM_P 0x0010 /* -P */#define FM_M 0x0020 /* -M *///#define FM_T 0x0040 /* -T */#define FM_F 0x0080 /* -F */  /* -F also sets the regular -f flags *//* sorting & formatting *//* U,B,G is Unix,BSD,Gnu and then there is the option itself */#define SF_U_O      1#define SF_U_o      2#define SF_B_O      3#define SF_B_o      4#define SF_B_m      5       /* overloaded: threads, sort, format */#define SF_G_sort   6#define SF_G_format 7/* headers */#define HEAD_SINGLE 0  /* default, must be 0 */#define HEAD_NONE   1#define HEAD_MULTI  2/********************** GENERAL TYPEDEF *******************//* Other fields that might be useful: * * char *name;     user-defined column name (format specification) * int reverse;    sorting in reverse (sort specification) * * name in place of u * reverse in place of n */typedef union sel_union {  pid_t pid;  pid_t ppid;  uid_t uid;  gid_t gid;  dev_t tty;  char  cmd[16];  /* this is _not_ \0 terminated */} sel_union;typedef struct selection_node {  struct selection_node *next;  sel_union *u;  /* used if selection type has a list of values */  int n;         /* used if selection type has a list of values */  int typecode;} selection_node;typedef struct sort_node {  struct sort_node *next;  int (*sr)(const proc_t* P, const proc_t* Q); /* sort function */  int reverse;   /* can sort backwards */  int typecode;  int need;} sort_node;typedef struct format_node {  struct format_node *next;  char *name;                             /* user can override default name */  int (*pr)(char *restrict const outbuf, const proc_t *restrict const pp); // print function/*  int (* const sr)(const proc_t* P, const proc_t* Q); */ /* sort function */  int width;  int need;  int vendor;                             /* Vendor that invented this */  int flags;  int typecode;} format_node;typedef struct format_struct {  const char *spec; /* format specifier */  const char *head; /* default header in the POSIX locale */  int (* const pr)(char *restrict const outbuf, const proc_t *restrict const pp); // print function  int (* const sr)(const proc_t* P, const proc_t* Q); /* sort function */  const int width;  const int need;       /* data we will need (files to read, etc.) */  const int vendor; /* Where does this come from? */  const int flags;} format_struct;/* though ps-specific, needed by general file */typedef struct macro_struct {  const char *spec; /* format specifier */  const char *head; /* default header in the POSIX locale */} macro_struct;/**************** PS TYPEDEF ***********************/typedef struct aix_struct {  const int   desc; /* 1-character format code */  const char *spec; /* format specifier */  const char *head; /* default header in the POSIX locale */} aix_struct;typedef struct shortsort_struct {  const int   desc; /* 1-character format code */  const char *spec; /* format specifier */} shortsort_struct;/* Save these options for later: -o o -O O --format --sort */typedef struct sf_node {  struct sf_node *next;  /* next arg */  format_node *f_cooked;  /* convert each arg alone, then merge */  sort_node   *s_cooked;  /* convert each arg alone, then merge */  char *sf;  int sf_code;} sf_node;/********************* UNDECIDED GLOBALS **************//* output.c */extern void show_one_proc(const proc_t *restrict const p, const format_node *restrict fmt);extern void print_format_specifiers(void);extern const aix_struct *search_aix_array(const int findme);extern const shortsort_struct *search_shortsort_array(const int findme);extern const format_struct *search_format_array(const char *findme);extern const macro_struct *search_macro_array(const char *findme);extern void init_output(void);extern int pr_nop(char *restrict const outbuf, const proc_t *restrict const pp);/* global.c */extern void reset_global(void);/* global.c */extern int             all_processes;extern const char     *bsd_j_format;extern const char     *bsd_l_format;extern const char     *bsd_s_format;extern const char     *bsd_u_format;extern const char     *bsd_v_format;extern int             bsd_c_option;extern int             bsd_e_option;extern uid_t           cached_euid;extern dev_t           cached_tty;extern char            forest_prefix[4 * 32*1024 + 100];extern int             forest_type;extern unsigned        format_flags;     /* -l -f l u s -j... */extern format_node    *format_list; /* digested formatting options */extern unsigned        format_modifiers; /* -c -j -y -P -L... */extern int             header_gap;extern int             header_type; /* none, single, multi... */extern int             include_dead_children;extern int             lines_to_next_header;extern int             max_line_width;extern const char     *namelist_file;extern int             negate_selection;extern int             page_size;  // "int" for math reasons?extern unsigned        personality;extern int             prefer_bsd_defaults;extern int             running_only;extern int             screen_cols;extern int             screen_rows;extern unsigned long   seconds_since_boot;extern selection_node *selection_list;extern unsigned        simple_select;extern sort_node      *sort_list;extern const char     *sysv_f_format;extern const char     *sysv_fl_format;extern const char     *sysv_j_format;extern const char     *sysv_l_format;extern unsigned        thread_flags;extern int             unix_f_option;extern int             user_is_number;extern int             wchan_is_number;/************************* PS GLOBALS *********************//* sortformat.c */extern int defer_sf_option(const char *arg, int source);extern const char *process_sf_options(int localbroken);extern void reset_sortformat(void);/* select.c */extern int want_this_proc(proc_t *buf);extern const char *select_bits_setup(void);/* help.c */extern const char *help_message;/* global.c */extern void self_info(void);/* parser.c */extern int arg_parse(int argc, char *argv[]);#endif

⌨️ 快捷键说明

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