深入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 ...
随机推荐
- IIS部署SSL,.crt .key 的证书,怎么部署到IIS
SSL连接作用不说,百度很多.因为最近想考虑重构一些功能,在登录这块有打算弄成HTTPS的,然后百度了,弄成了,就记录一下,以便以后万一部署的时候忘记掉. 做实验的时候,拿的我个人申请的已经备案的域名 ...
- c# 对象反射赋值未知属性需类型转换
反射某个类时,对于类的属性,字段.已知有已知的方法,未知有未知的写法. 而SetValues赋值则需要类型转换 情况1,该属性类型是已知类型,例如:int int value=500; propert ...
- dynamic的好处
dynamic 可在反射.json反序列化时使用.已达到减少代码量的效果.看代码 using System; namespace ConsoleApp2 { class Program { stati ...
- .NET中的程序集
参考:http://blog.sina.com.cn/s/blog_7ade159d0102wmg9.html 程序集(Assembly,装配件,.NET程序集) 程序集是应用程序的部署单元,.NET ...
- linux联网配置(更新)
重启网络配置:service network restart: 常见问题: linux 虚拟机ifconfig 显示eth1 文件ifcfg-eth0中device为eth0的问题 为什么eth0 ...
- 51nod1228 序列求和(伯努利数)
题面 传送门 题解 \(O(n^2)\)预处理伯努利数 不知道伯努利数是什么的可以看看这篇文章 不过这个数据范围拉格朗日差值应该也没问题--吧--大概-- //minamoto #include< ...
- go语言排序
冒泡: package main import ( "fmt" ) func BubbleSort(arr []int) []int { // 改进的冒泡排序 num := len ...
- eclipse搭建maven project的spring4 spring mvc mybatis
一,先确定已经安装好了Eclipse Java EE IDE for Web Developers我用的是如下版本 Version: Neon.3 Release (4.6.3)Build id: 2 ...
- Python正则表达式匹配日期与时间
#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Randy' import re from datetime import da ...
- 《Andrew Ng深度学习》笔记1
深度学习概论 1.什么是神经网络? 2.用神经网络来监督学习 3.为什么神经网络会火起来? 1.什么是神经网络? 深度学习指的是训练神经网络.通俗的话,就是通过对数据的分析与计算发现自变量与因变量的映 ...