设为首页 收藏本站
查看: 2271|回复: 0

[经验分享] 深入redis内部之redis启动过程之一

[复制链接]

尚未签到

发表于 2015-7-21 07:11:06 | 显示全部楼层 |阅读模式
  redis作为一个服务器,它的启动是从main函数开始的。redis.c
  1. 进程重命名



#ifdef INIT_SETPROCTITLE_REPLACEMENT
spt_init(argc, argv);
#endif
  定义在config.h



/* Check if we can use setproctitle().  修改进程名称
* BSD systems have support for it, we provide an implementation for
* Linux and osx. */
#if (defined __NetBSD__ || defined __FreeBSD__ || defined __OpenBSD__) //bsd(unix的变种)宏定义
#define USE_SETPROCTITLE
#endif
#if (defined __linux || defined __APPLE__) //linux和苹果的宏定义
#define USE_SETPROCTITLE
#define INIT_SETPROCTITLE_REPLACEMENT
void spt_init(int argc, char *argv[]);
void setproctitle(const char *fmt, ...);
#endif
  http://www.baike.com/wiki/BSD
  BSD的开源後裔
不同的BSD操作系统针对不同的用途及用户,可应用于多种硬件构架。在政府机构中常能看到BSD的身影。虽然下面的BSD功能可能并非独有,但每种BSD在各自的领域,都逐渐具有了良好声誉,有的专注于性能,有的则以安全见长。
DragonflyBSD是最年轻的BSD,专门提供比FreeBSD更优秀的对称多处理机系统,并使内核直接支持SSI集群,以取得更好的计算效果。这个项目在此方向上,才开始数年,主要关注i386平台。
FreeBSD在BSD家族中以易用性与高性能而着称,由于主要用作微处理器架构,如i386、AMD's 64-bit i386扩展,所以FreeBSD非常关注多处理器。FreeBSD在i386和amd64服务器上,运行地非常好,当然,它也可以在其他硬件构架上运行。
NetBSD拥有特别出色的可移植性,能在多达54种平台上运行,小到嵌入式的掌上设备,大到服务器群,NetBSD甚至还在国际空间站中服务。
OpenBSD在密码学和安全方面特别出众,可移植性也很好,当然略逊于NetBSD。安全功能如OpenSSH,是由OpenBSD率先开创的。OpenBSD作为安全请求机器(security demanding machines)运行,受到好评。
必须注意的是,上面所罗列的,更多地是基于感性认识,并针对其开发焦点,并没有严格地比较规则。实际而言,每种具体的BSD都可担当许多角色任务。
  2. 设置locale
  



    setlocale(LC_COLLATE,"");
http://manpages.ubuntu.com/manpages/lucid/en/man3/setlocale.3.html

NAME

       setlocale - set the current locale

SYNOPSIS

       #include
char *setlocale(int category, const char *locale);

DESCRIPTION

       The  setlocale() function is used to set or query the program’s current
locale.
If locale is  not  NULL,  the  program’s  current  locale  is  modified
according  to  the  arguments.   The argument category determines which
parts of the program’s current locale should be modified.
LC_ALL for all of the locale.
LC_COLLATE
for regular expression matching (it determines  the  meaning  of
range expressions and equivalence classes) and string collation.
LC_CTYPE
for  regular  expression  matching,  character   classification,
conversion,   case-sensitive   comparison,  and  wide  character
functions.
LC_MESSAGES
for localizable natural-language messages.
LC_MONETARY
for monetary formatting.
LC_NUMERIC
for number  formatting  (such  as  the  decimal  point  and  the
thousands separator).
LC_TIME
for time and date formatting.
The  argument  locale is a pointer to a character string containing the
required setting of category.  Such a string  is  either  a  well-known
constant  like "C" or "da_DK" (see below), or an opaque string that was
returned by another call of setlocale().
If locale is "", each part of the locale that should be modified is set
according    to   the   environment   variables.    The   details   are
implementation-dependent.  For glibc, first (regardless  of  category),
the  environment  variable  LC_ALL  is  inspected, next the environment
variable with the same name  as  the  category  (LC_COLLATE,  LC_CTYPE,
LC_MESSAGES,   LC_MONETARY,   LC_NUMERIC,   LC_TIME)  and  finally  the
environment variable LANG.  The first existing environment variable  is
used.   If its value is not a valid locale specification, the locale is
unchanged, and setlocale() returns NULL.
The locale "C" or "POSIX" is  a  portable  locale;  its  LC_CTYPE  part
corresponds to the 7-bit ASCII character set.
A      locale      name      is      typically      of     the     form
language[_territory][.codeset][@modifier], where language is an ISO 639
language  code, territory is an ISO 3166 country code, and codeset is a
character set or encoding identifier like ISO-8859-1 or UTF-8.   For  a
list of all supported locales, try "locale -a", cf. locale(1).
If locale is NULL, the current locale is only queried, not modified.
On  startup of the main program, the portable "C" locale is selected as
default.  A program may be made portable to all locales by calling:
setlocale(LC_ALL, "");
after program initialization, by  using  the  values  returned  from  a
localeconv(3)  call  for  locale-dependent  information,  by  using the
multi-byte  and  wide  character  functions  for  text  processing   if
MB_CUR_MAX  >  1,  and  by  using strcoll(3), wcscoll(3) or strxfrm(3),
wcsxfrm(3) to compare strings.

RETURN VALUE

       A  successful  call  to  setlocale()  returns  an  opaque  string  that
corresponds  to the locale set.  This string may be allocated in static
storage.  The string returned is such that a subsequent call with  that
string  and  its  associated  category  will  restore  that part of the
process’s locale.  The return value is NULL if the  request  cannot  be
honored.

CONFORMING TO

       C89, C99, POSIX.1-2001.

NOTES

       Linux  (that  is, glibc) supports the portable locales "C" and "POSIX".
In the good old days there used to be support for the European  Latin-1
"ISO-8859-1"  locale  (e.g.,  in  libc-4.5.21 and libc-4.6.27), and the
Russian  "KOI-8"  (more   precisely,   "koi-8r")   locale   (e.g.,   in
libc-4.6.27),     so    that    having    an    environment    variable
LC_CTYPE=ISO-8859-1  sufficed  to  make  isprint(3)  return  the  right
answer.   These  days non-English speaking Europeans have to work a bit
harder, and must install actual locale files.

SEE ALSO

       locale(1),  localedef(1),  isalpha(3),  localeconv(3),  nl_langinfo(3),
rpmatch(3), strcoll(3), strftime(3), charsets(7), locale(7)

COLOPHON

       This  page  is  part of release 3.23 of the Linux man-pages project.  A
description of the project, and information about reporting  bugs,  can
be found at http://www.kernel.org/doc/man-pages/.
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88803-1-1.html 上篇帖子: Redis 介绍【学习篇一】 下篇帖子: redis数据结构HyperLogLog
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表