深入redis内部之redis启动过程之一
redis作为一个服务器,它的启动是从main函数开始的。redis.c1. 进程重命名
#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
Thesetlocale() function is used to set or query the program’s current
locale.
If locale isnotNULL,theprogram’scurrentlocaleismodified
accordingtothearguments. 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 determinesthemeaningof
range expressions and equivalence classes) and string collation.
LC_CTYPE
forregularexpressionmatching,character classification,
conversion, case-sensitive comparison,andwidecharacter
functions.
LC_MESSAGES
for localizable natural-language messages.
LC_MONETARY
for monetary formatting.
LC_NUMERIC
for numberformatting(suchasthedecimalpointandthe
thousands separator).
LC_TIME
for time and date formatting.
Theargumentlocale is a pointer to a character string containing the
required setting of category.Such a stringiseitherawell-known
constantlike "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 (regardlessofcategory),
theenvironmentvariableLC_ALLisinspected, next the environment
variable with the same nameasthecategory(LC_COLLATE,LC_CTYPE,
LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME)andfinallythe
environment variable LANG.The first existing environment variableis
used. If its value is not a valid locale specification, the locale is
unchanged, and setlocale() returns NULL.
The locale "C" or "POSIX" isaportablelocale;itsLC_CTYPEpart
corresponds to the 7-bit ASCII character set.
A locale name is typically of the form
language[.codeset][@modifier], where language is an ISO 639
languagecode, territory is an ISO 3166 country code, and codeset is a
character set or encoding identifier like ISO-8859-1 or UTF-8. Fora
list of all supported locales, try "locale -a", cf. locale(1).
If locale is NULL, the current locale is only queried, not modified.
Onstartup 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, byusingthevaluesreturnedfroma
localeconv(3)callforlocale-dependentinformation,byusing the
multi-byteandwidecharacterfunctionsfortextprocessing if
MB_CUR_MAX>1,andbyusing strcoll(3), wcscoll(3) or strxfrm(3),
wcsxfrm(3) to compare strings.
RETURN VALUE
Asuccessfulcalltosetlocale()returnsanopaquestringthat
correspondsto the locale set.This string may be allocated in static
storage.The string returned is such that a subsequent call withthat
stringanditsassociatedcategorywillrestorethat part of the
process’s locale.The return value is NULL if therequestcannotbe
honored.
CONFORMING TO
C89, C99, POSIX.1-2001.
NOTES
Linux(thatis, glibc) supports the portable locales "C" and "POSIX".
In the good old days there used to be support for the EuropeanLatin-1
"ISO-8859-1"locale(e.g.,inlibc-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-1sufficedtomakeisprint(3)returntheright
answer. Thesedays 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
Thispageispart of release 3.23 of the Linux man-pages project.A
description of the project, and information about reportingbugs,can
be found at http://www.kernel.org/doc/man-pages/.
页:
[1]