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

📄 getconf.c

📁 UNIX下SH的实现源码
💻 C
📖 第 1 页 / 共 2 页
字号:
  { "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 + -