📄 uname.c
字号:
/* * uname - print system information * * usage: uname [-amnrsv] * *//* Copyright (C) 1999-2009 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see <http://www.gnu.org/licenses/>.*/#include <config.h>#include <stdio.h>#include "bashtypes.h"#if defined (HAVE_UNAME)# include <sys/utsname.h>#elsestruct utsname { char sysname[32]; char nodename[32]; char release[32]; char version[32]; char machine[32];};#endif#include <errno.h>#include "builtins.h"#include "shell.h"#include "bashgetopt.h"#include "common.h"#define FLAG_SYSNAME 0x01 /* -s */#define FLAG_NODENAME 0x02 /* -n */#define FLAG_RELEASE 0x04 /* -r */#define FLAG_VERSION 0x08 /* -v */#define FLAG_MACHINE 0x10 /* -m, -p */#define FLAG_ALL 0x1f#ifndef errnoextern int errno;#endifstatic void uprint();static int uname_flags;uname_builtin (list) WORD_LIST *list;{ int opt, r; struct utsname uninfo; uname_flags = 0; reset_internal_getopt (); while ((opt = internal_getopt (list, "amnprsv")) != -1) { switch (opt) { case 'a': uname_flags |= FLAG_ALL; break; case 'm': case 'p': uname_flags |= FLAG_MACHINE; break; case 'n': uname_flags |= FLAG_NODENAME; break; case 'r': uname_flags |= FLAG_RELEASE; break; case 's': uname_flags |= FLAG_SYSNAME; break; case 'v': uname_flags |= FLAG_VERSION; break; default: builtin_usage (); return (EX_USAGE); } } list = loptend; if (list) { builtin_usage (); return (EX_USAGE); } if (uname_flags == 0) uname_flags = FLAG_SYSNAME; /* Only ancient systems will not have uname(2). */#ifdef HAVE_UNAME if (uname (&uninfo) < 0) { builtin_error ("cannot get system name: %s", strerror (errno)); return (EXECUTION_FAILURE); }#else builtin_error ("cannot get system information: uname(2) not available"); return (EXECUTION_FAILURE);#endif uprint (FLAG_SYSNAME, uninfo.sysname); uprint (FLAG_NODENAME, uninfo.nodename); uprint (FLAG_RELEASE, uninfo.release); uprint (FLAG_VERSION, uninfo.version); uprint (FLAG_MACHINE, uninfo.machine); return (EXECUTION_SUCCESS);}static voiduprint (flag, info) int flag; char *info;{ if (uname_flags & flag) { uname_flags &= ~flag; printf ("%s%c", info, uname_flags ? ' ' : '\n'); }}char *uname_doc[] = { "Display system information.", "", "Display information about the system hardware and OS.", (char *)NULL};struct builtin uname_struct = { "uname", uname_builtin, BUILTIN_ENABLED, uname_doc, "uname [-amnrsv]", 0};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -