深入redis内部之redis启动过程之一
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启动过程之一的更多相关文章
- Redis源码研究--启动过程
---------------------6月23日--------------------------- Redis启动入口即main函数在redis.c文件,伪代码如下: int main(int ...
- 深入redis内部之redis启动过程之二
接上文,继续分析代码 1. 设置线程安全模式 zmalloc_enable_thread_safeness();/*设置线程安全标识符为1*/ void zmalloc_enable_thread_s ...
- 曹工说Redis源码(3)-- redis server 启动过程完整解析(中)
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
- Redis学习笔记-Redis内部数据结构
Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...
- redis(一)内部机制的介绍和启动过程
redis(一)内部机制的介绍和启动过程 redis的基本介绍 redis服务端 redis客户端 redis的持久化 redis中的文件事件和时间时间 redis的启动过程 redis的基本介绍 r ...
- 关于Redis的启动过程
一.简介 Redis的启动也就是main函数的执行,程序的入口在redis.c中,启动流程: 1. 初始化默认服务器配置,如果是sentinel模式还需进行额外的配置 2. 修改配置文件或配置选项,这 ...
- 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
- 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)
曹工说Redis源码(5)-- redis server 启动过程解析,eventLoop处理事件前的准备工作(下) 文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis ...
- 【源码】Redis Server启动过程
本文基于社区版Redis 4.0.8 1. 初始化参数配置 由函数initServerConfig()实现,具体操作就是给配置参数赋初始化值: //设置时区 setlocale(LC_CO ...
随机推荐
- SQL多行并一行统计例子之STUFF()函数+FOR XML PATH()函数应用
SELECT * FROM tbiz_ProjectRelation 目标统计每个项目有几条申请记录 Step1 SELECT ProjectID , RelationIDs , , '') FROM ...
- 上课总结-数据结构c++
class 1 数据结构就是指 按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合. 例1.煤气管道的铺设问题.如图需为城市的各小区之间铺设煤气 ...
- ubuntu命令行安装tomcat8
环境: 虚拟机VM14 Ubuntu16.04 java 1.8 步骤: 先更新 sudo apt-get update 然后安装: sudo apt-get install tomcat8 等一会 ...
- Django 使用第三方服务发送电子邮件
在 Django 网站中使用 mailgun 的邮件收发服务. 1.在 mailgun 官网上注册个账号(免费,免费账号每个月有10000条收发邮件的服务,对我来说已经完全够用了),注册完成后界面如图 ...
- 洛谷P2754 [CTSC1999]家园(最大流)
传送门 这题思路太强了……大佬们怎么想到的……我这菜鸡根本想不出来…… 先判断是否能到达,对每一艘飞船能到的地方用并查集合并一下,最后判断一下是否连通 然后考虑几天怎么判断,我们可以枚举. 每一个点表 ...
- 洛谷P3356 火星探险问题(费用流)
传送门 和深海机器人问题差不多……看到有的大佬是用dp过的,强无敌…… 考虑一下,把每一个点拆点,分别是$A_i$和$B_i$,连一条容量为$inf$,费用为$0$的边,表示可以随便走.如果有石头,再 ...
- 安装 CentOs 系统 及 Python 及 Scrapy 框架
1: 先安装Centos 系统: 为什么选择CentOs系统,而不选择Ubuntu ? 我在Ubuntu上尝试了三次安装 python 和 Scrapy ,结果都没成功,在运维老王的建议下 使用Cen ...
- linux上的那些查找的命令
由于工作的需要,少不得要在linux系统上查找各种各样的文件,关于在linux查找的命令有不少,这里小小的总结下. 简单介绍下各个命令的用途: find:实际搜索硬盘查询文件名称: whereis:查 ...
- ActiveMQ消息队列的搭建和使用
一.安装ActiveMQ(部署在centos7) 1.ActiveMQ官网下载地址:http://activemq.apache.org/download.html 2.解压安装包:tar xvzf ...
- 如何在SQLServer中处理每天四亿三千万记录的(数据库大数据处理)
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...