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 <locale.h>

       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/.

深入redis内部之redis启动过程之一的更多相关文章

  1. Redis源码研究--启动过程

    ---------------------6月23日--------------------------- Redis启动入口即main函数在redis.c文件,伪代码如下: int main(int ...

  2. 深入redis内部之redis启动过程之二

    接上文,继续分析代码 1. 设置线程安全模式 zmalloc_enable_thread_safeness();/*设置线程安全标识符为1*/ void zmalloc_enable_thread_s ...

  3. 曹工说Redis源码(3)-- redis server 启动过程完整解析(中)

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

  4. Redis学习笔记-Redis内部数据结构

    Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...

  5. redis(一)内部机制的介绍和启动过程

    redis(一)内部机制的介绍和启动过程 redis的基本介绍 redis服务端 redis客户端 redis的持久化 redis中的文件事件和时间时间 redis的启动过程 redis的基本介绍 r ...

  6. 关于Redis的启动过程

    一.简介 Redis的启动也就是main函数的执行,程序的入口在redis.c中,启动流程: 1. 初始化默认服务器配置,如果是sentinel模式还需进行额外的配置 2. 修改配置文件或配置选项,这 ...

  7. 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

  8. 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)

    曹工说Redis源码(5)-- redis server 启动过程解析,eventLoop处理事件前的准备工作(下) 文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis ...

  9. 【源码】Redis Server启动过程

    本文基于社区版Redis 4.0.8       1. 初始化参数配置 由函数initServerConfig()实现,具体操作就是给配置参数赋初始化值: //设置时区 setlocale(LC_CO ...

随机推荐

  1. .NET和C#的版本历史

    维基百科页面:https://en.wikipedia.org/wiki/.NET_Framework_version_history Versionnumber CLRversion Release ...

  2. JavaScript 如何工作:渲染引擎和性能优化技巧

    翻译自:How JavaScript works: the rendering engine and tips to optimize its performance 这是探索 JavaScript ...

  3. (一)springmvc+spring+mybatis+maven框架搭建

    (一)springmvc+spring+mybatis+maven框架搭建 1.说明 工作之余,为了学习点东西.先搭建个框架. 以后要往里面加东西,比如rabbitMQ.redis.shiro等. 也 ...

  4. D:大整数的加减乘除

    描述 给出两个正整数以及四则运算操作符(+ - * /),求运算结果. 输入第一行:正整数a,长度不超过100第二行:四则运算符o,o是“+”,“-”,“*”,“/”中的某一个第三行:正整数b,长度不 ...

  5. kali linux之服务扫描

    识别开放端口上运行的应用.识别目标操作系统,提高攻击效率 banner捕获(软件开发商,软件名称,服务类型,版本号-----直接发现已知的漏洞和弱点) 服务识别 操作系统识别 snmp分析(简单网络管 ...

  6. Win7下C/C++跨平台开发工具IDE的安装之CodeBlocks

    1. Win7下安装CodeBlocks: 下载带有mingw的CodeBlocks:http://www.codeblocks.org/downloads/26#windows 运行所下载程序: 点 ...

  7. CentOS 7 基础网络配置

    基础的网络配置,包括静态IP地址.子网掩码.网关.DNS,使用 nmtui 和 nmcli 工具时必须开启 NetworkManager 服务 文本用户界面工具 nmtui [root@localho ...

  8. python 的内置模块 re

    在 pattern 的 “” 前面需要加上一个 r 用来表示这是正则表达式, 而不是普通字符串 >>> import re >>> ptn = r"r[a ...

  9. yyy的python3第八天学习

    望着小月亮:https://www.cnblogs.com/triple-y/ 请尊重原创:https://www.cnblogs.com/triple-y/p/9655753.html python ...

  10. C++_标准模板库STL概念介绍2-泛型编程

    有了之前使用STL的经验后,接下来讨论泛型编程及其底层的理念: 首先我们知道STL只是泛型编程的一种: 而面向对象的编程方式关注的是编程的数据方面: 而泛型编程关注的是算法: 但是,他们之间的一个重要 ...