📄 getconf.c
字号:
{ "SEM_NSEMS_MAX", SYSCONF, _SC_SEM_NSEMS_MAX },#endif#if defined (_SC_SEM_VALUE_MAX) { "SEM_VALUE_MAX", SYSCONF, _SC_SEM_VALUE_MAX },#endif#if defined (_SC_SIGQUEUE_MAX) { "SIGQUEUE_MAX", SYSCONF, _SC_SIGQUEUE_MAX },#endif#if defined (_SC_TIMER_MAX) { "TIMER_MAX", SYSCONF, _SC_TIMER_MAX },#endif#if defined (_SC_LOGIN_NAME_MAX) { "LOGIN_NAME_MAX", SYSCONF, _SC_LOGIN_NAME_MAX },#endif#if defined (_SC_LOGNAME_MAX) { "LOGNAME_MAX", SYSCONF, _SC_LOGNAME_MAX },#endif#if defined (_SC_TTY_NAME_MAX) { "TTY_NAME_MAX", SYSCONF, _SC_TTY_NAME_MAX },#endif#if defined (_SC_THREAD_DESTRUCTOR_ITERATIONS) { "PTHREAD_DESTRUCTOR_ITERATIONS", SYSCONF, _SC_THREAD_DESTRUCTOR_ITERATIONS },#endif#if defined (_SC_THREAD_KEYS_MAX) { "PTHREAD_KEYS_MAX", SYSCONF, _SC_THREAD_KEYS_MAX },#endif#if defined (_SC_THREAD_STACK_MIN) { "PTHREAD_STACK_MIN", SYSCONF, _SC_THREAD_STACK_MIN },#endif#if defined (_SC_THREAD_THREADS_MAX) { "PTHREAD_THREADS_MAX", SYSCONF, _SC_THREAD_THREADS_MAX },#endif /* XPG 4.2 Optional Facility Configuration Values */#if defined (_SC_XOPEN_UNIX) { "_XOPEN_UNIX", SYSCONF, _SC_XOPEN_UNIX }, { "_XOPEN_CRYPT", SYSCONF, _SC_XOPEN_CRYPT }, { "_XOPEN_ENH_I18N", SYSCONF, _SC_XOPEN_ENH_I18N }, { "_XOPEN_SHM", SYSCONF, _SC_XOPEN_SHM }, { "_XOPEN_VERSION", SYSCONF, _SC_XOPEN_VERSION },# if defined (_SC_XOPEN_XCU_VERSION) { "_XOPEN_XCU_VERSION", SYSCONF, _SC_XOPEN_XCU_VERSION },# endif#endif#if defined (_SC_XOPEN_REALTIME) { "_XOPEN_REALTIME", SYSCONF, _SC_XOPEN_REALTIME }, { "_XOPEN_REALTIME_THREADS", SYSCONF, _SC_XOPEN_REALTIME_THREADS },#endif#if defined (_SC_XOPEN_LEGACY) { "_XOPEN_LEGACY", SYSCONF, _SC_XOPEN_LEGACY },#endif /* _SC_XOPEN_LEGACY */ /* Single UNIX Specification version 2 Optional Facility Configuration Values */#if defined (_SC_XBS5_ILP32_OFF32) { "_XBS5_ILP32_OFF32", SYSCONF, _SC_XBS5_ILP32_OFF32 }, { "_XBS5_ILP32_OFFBIG", SYSCONF, _SC_XBS5_ILP32_OFFBIG }, { "_XBS5_LP64_OFF64", SYSCONF, _SC_XBS5_LP64_OFF64 }, { "_XBS5_LPBIG_OFFBIG", SYSCONF, _SC_XBS5_LPBIG_OFFBIG },#endif /* _SC_XBS5_ILP32_OFF32 */ /* POSIX.1 Configurable Pathname Values */ { "LINK_MAX", PATHCONF, _PC_LINK_MAX }, { "MAX_CANON", PATHCONF, _PC_MAX_CANON }, { "MAX_INPUT", PATHCONF, _PC_MAX_INPUT }, { "NAME_MAX", PATHCONF, _PC_NAME_MAX }, { "PATH_MAX", PATHCONF, _PC_PATH_MAX }, { "PIPE_BUF", PATHCONF, _PC_PIPE_BUF }, { "_POSIX_CHOWN_RESTRICTED", PATHCONF, _PC_CHOWN_RESTRICTED }, { "_POSIX_NO_TRUNC", PATHCONF, _PC_NO_TRUNC }, { "_POSIX_VDISABLE", PATHCONF, _PC_VDISABLE }, /* XPG 4.2 Configurable Pathname Values */#if defined (_PC_FILESIZEBITS) { "FILESIZEBITS", PATHCONF, _PC_FILESIZEBITS },#endif#if defined (_PC_ASYNC_IO) { "_POSIX_ASYNC_IO", PATHCONF, _PC_ASYNC_IO },#endif#if defined (_PC_PRIO_IO) { "_POSIX_PRIO_IO", PATHCONF, _PC_PRIO_IO },#endif#if defined (_PC_SYNC_IO) { "_POSIX_SYNC_IO", PATHCONF, _PC_SYNC_IO },#endif { NULL }};static int num_getconf_variables = sizeof(conf_table) / sizeof(struct conf_variable) - 1;extern char *this_command_name;extern char *xmalloc ();extern char **make_builtin_argv ();static void getconf_help ();static int getconf_print ();static int getconf_one ();static int getconf_all ();intgetconf_builtin (list) WORD_LIST *list;{ int c, r, opt, aflag; char **v; aflag = 0; reset_internal_getopt(); while ((opt = internal_getopt (list, "ah")) != -1) { switch (opt) { case 'a': aflag = 1; break; case 'h': getconf_help(); return(EXECUTION_SUCCESS); default: builtin_usage(); return(EX_USAGE); } } list = loptend; if ((aflag == 0 && list == 0) || (aflag && list) || list_length(list) > 2) { builtin_usage(); return(EX_USAGE); } r = aflag ? getconf_all() : getconf_one(list); return r;}static voidgetconf_help(){ const struct conf_variable *cp; register int i, column; builtin_usage(); printf("Acceptable variable names are:\n"); for (cp = conf_table; cp->name != NULL; cp++) { if (cp->type == PATHCONF) printf("%s pathname\n", cp->name); else printf("%s\n", cp->name); }}static intgetconf_print(cp, vpath, all)struct conf_variable *cp;char *vpath;int all;{ long val; char *sval; size_t slen; switch (cp->type) { case CONSTANT: printf("%ld\n", cp->value); break; case CONFSTR: errno = 0; slen = confstr (cp->value, (char *) 0, (size_t) 0); if (slen == 0) { if (errno != 0) { if (all) printf ("getconf: %s\n", strerror(errno)); else builtin_error ("%s", strerror(errno)); } else printf ("undefined\n"); return (EXECUTION_FAILURE); } sval = xmalloc(slen); confstr(cp->value, sval, slen); printf("%s\n", sval); free(sval); break; case SYSCONF: errno = 0; if ((val = sysconf(cp->value)) == -1) { if (errno != 0) { if (all) printf("getconf: %s\n", strerror (errno)); else builtin_error ("%s", strerror (errno)); return (EXECUTION_FAILURE); } printf ("undefined\n"); } else { printf("%ld\n", val); } break; case PATHCONF: errno = 0; if ((val = pathconf(vpath, cp->value)) == -1) { if (errno != 0) { if (all) printf("getconf: %s: %s\n", vpath, strerror (errno)); else builtin_error ("%s: %s", vpath, strerror (errno)); return (EXECUTION_FAILURE); } printf ("undefined\n"); } else { printf ("%ld\n", val); } break; } return (ferror(stdout) ? EXECUTION_FAILURE : EXECUTION_SUCCESS);}static intgetconf_all(){ const struct conf_variable *cp; int ret; ret = EXECUTION_SUCCESS; for (cp = conf_table; cp->name != NULL; cp++) { printf("%-35s", cp->name); if (getconf_print(cp, ".", 1) == EXECUTION_FAILURE) ret = EXECUTION_FAILURE; } return ret;}static intgetconf_one(list) WORD_LIST *list;{ const struct conf_variable *cp; char *vname, *vpath; vname = list->word->word; vpath = (list->next && list->next->word) ? list->next->word->word : (char *)NULL; for (cp = conf_table; cp->name != NULL; cp++) { if (strcmp(vname, cp->name) == 0) break; } if (cp->name == NULL) { builtin_error ("%s: unknown variable", vname); return (EXECUTION_FAILURE); } if (cp->type == PATHCONF) { if (list->next == 0) { builtin_usage(); return(EX_USAGE); } } else { if (list->next) { builtin_usage(); return(EX_USAGE); } } return (getconf_print(cp, vpath, 0));}static char *getconf_doc[] = { "getconf writes the current value of a configurable system limit or", "option variable to the standard output.", (char *)NULL};struct builtin getconf_struct = { "getconf", getconf_builtin, BUILTIN_ENABLED, getconf_doc, "getconf -a or getconf -h or getconf sysvar or getconf pathvar pathname", 0};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -