??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美精品在线播放,亚洲欧美日韩国产一区二区三区
,最新成人av网站 http://m.shnenglu.com/jinq0123/category/5139.htmlzh-cn Thu, 14 Jun 2018 00:15:15 GMT Thu, 14 Jun 2018 00:15:15 GMT 60 etcd+registrator+confd 服务发现 http://m.shnenglu.com/jinq0123/archive/2018/06/13/215722.html金庆 金庆 Wed, 13 Jun 2018 06:27:00 GMT http://m.shnenglu.com/jinq0123/archive/2018/06/13/215722.html http://m.shnenglu.com/jinq0123/comments/215722.html http://m.shnenglu.com/jinq0123/archive/2018/06/13/215722.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/215722.html http://m.shnenglu.com/jinq0123/services/trackbacks/215722.html etcd+registrator+confd 服务发现 (金庆的专?2018.6) 因ؓk8s使用 etcd, 所以?etcd 作ؓ服务发现?DB. registrator 可以?docker 方式q行的服务自动注册到 etcd. confd d etcd, 生成配置文g?br /> 先运行一个etcd用于试Q?br />docker run -d \ -p 12379:2379 \ --name jinqing-etcd \ quay.io/coreos/etcd \ /usr/local/bin/etcd \ --listen-client-urls http://0.0.0.0:2379 \ --advertise-client-urls http://0.0.0.0:12379 再运?registrator:docker run -d --rm \ --name=jinqing-registrator \ --net=host \ --volume=/var/run/docker.sock:/tmp/docker.sock \ gliderlabs/registrator:latest \ -ip="192.168.93.183" \ etcd://127.0.0.1:12379/registrator 好像只能使用本机?etcd. 一般需要用-ip参数指定本机IP。注册到 registrator 目录?br /> ?etcdkeeper 可以查看自动注册的服务。registrator 不支?etcd v3. 然后配置 confdmkdir -p /etc/confd/{conf.d,templates} /etc/confd/conf.d/myconfig.toml[template] src = "services.toml.tmpl" dest = "/tmp/services.toml" keys = [ "/registrator", ] /etc/confd/templates/services.toml.tmpl[config] {{- range lsdir "/registrator"}} {{- $serviceName := . }} {{- $serviceDir := printf "/registrator/%s/*" $serviceName }} [config.{{ $serviceName }}] # {{ $serviceDir }} {{- range gets $serviceDir }} {{ base .Key }} = {{ .Value }} {{- end }} {{- end}} # End of [config]. ?lsdir 列出所有服务目录,然后?gets 取服务目录下的键值对?br /> 执行 confd:~/go/bin/confd -onetime -backend etcd -node http://127.0.0.1:12379 [jinqing@localhost confd]$ cat /tmp/services.toml [config] [config.etcd-2379] # /registrator/etcd-2379/* localhost.tech:jinqing-etcd:2379 = 192.168.93.183:12379 [config.nginx] # /registrator/nginx/* localhost.tech:jinqing-nginx:80 = 192.168.93.183:1024 [config.registry] # /registrator/registry/* localhost.tech:registry:5000 = 192.168.93.183:5000 # End of [config].
]]> 用docker stack开启redis集群 http://m.shnenglu.com/jinq0123/archive/2017/10/26/215308.html金庆 金庆 Thu, 26 Oct 2017 04:08:00 GMT http://m.shnenglu.com/jinq0123/archive/2017/10/26/215308.html http://m.shnenglu.com/jinq0123/comments/215308.html http://m.shnenglu.com/jinq0123/archive/2017/10/26/215308.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/215308.html http://m.shnenglu.com/jinq0123/services/trackbacks/215308.html 用docker stack开启redis集群 (金庆的专?2017.10) ?个docker swarm节点Q开启redis cluster. 每个机器上开2个redis节点Q共10个redis节点?br />采用官方的redis:alpine镜像?br /> docker-stack.yml 如下Q?br />version: "3" services: redis001: image: redis:alpine volumes: - /home/redis/001/data:/data - /home/redis/001/conf:/conf command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 10.240.79.8 --cluster-announce-port 7001 --cluster-announce-bus-port 17001 ports: - "7001:6379" - "17001:16379" networks: - redisnet deploy: placement: constraints: - node.hostname == host-10-240-79-8 redis002: image: redis:alpine volumes: - /home/redis/002/data:/data - /home/redis/002/conf:/conf command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 10.240.79.9 --cluster-announce-port 7002 --cluster-announce-bus-port 17002 ports: - "7002:6379" - "17002:16379" networks: - redisnet deploy: placement: constraints: - node.hostname == host-10-240-79-9 redis003: ... redis010: ... networks: redisnet: 数据保存文g?/home/redis/001/data 集群配置文g保存到 /home/redis/001/conf/nodes.conf 各机器上目录需要预先创建,不然docker开启失败?br />q且需要设|目录权限,不然?Permission denied". redis-server以用户uid=100(redis)q行Q所?br /> chown -R 100 /home/redis/ 启动redis服务? docker stack deploy -c docker-stack.yml redis redis-server启动后,q行 redis-trib.rb 来组?redis cluster: docker run --rm -it inem0o/redis-trib create --replicas 1 10.240.79.8:7001 10.240.79.9:7002 ... 10.240.79.12:7010 注意 inem0o/redis-trib 的说明中Q命令示例缺?"-it", 会报错退出:Can I set the above configuration? (type 'yes' to accept): : undefined method `chomp' for nil:NilClass (NoMethodError) from /usr/bin/redis-trib:1295:in `create_cluster_cmd' from /usr/bin/redis-trib:1701:in `<main>' q行 redis-cli 试Q?-c" 参数表示集群Q可q接L机器?001-7010L端口Q?br />[root@host-10-240-79-9 ~]# docker run -it --rm redis:alpine redis-cli -h 10.240.79.8 -p 7006 -c 10.240.79.8:7006> get a -> Redirected to slot [15495] located at 10.240.79.10:7003 (nil) 用swarm mode开启redis服务比较方便?br />但是Z性能考虑Q应该禁?swarm 的NAT转发和负载均衡?br />研究了下Q暂时还没学会?br /> ]]> CentOS升Svn到最新版 http://m.shnenglu.com/jinq0123/archive/2015/04/23/210429.html金庆 金庆 Thu, 23 Apr 2015 08:54:00 GMT http://m.shnenglu.com/jinq0123/archive/2015/04/23/210429.html http://m.shnenglu.com/jinq0123/comments/210429.html http://m.shnenglu.com/jinq0123/archive/2015/04/23/210429.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/210429.html http://m.shnenglu.com/jinq0123/services/trackbacks/210429.html CentOS升Svn到最新版 (金庆的专? CentOS/RHEL yum 安装?subversion ?1.6.11 版本Q?br />qVisulaSVN服务器时会有"Key usage violation "Q?br />[jinq@jinqing-centos ~]$ svn co https://.../server svn: OPTIONS of 'https://.../server': SSL handshake failed: SSL error: Key usage violation in certificate has been detected. (https://...) subversion升到最新版可解册错误?br /> Install Subversion 1.8.9 ( SVN Client ) on CentOS/RHEL Thanks to Wandisco, which is maintaining the rpm packages for latest Subversion version. ( http://tecadmin.net/install-subversion-1-8-on-centos-rhel/ ) 按指C|新的yum源,然后安装.[jinq@jinqing-centos ~]$ svn --version svn, version 1.8.13 (r1667537) compiled Apr 2 2015, 15:55:22 on x86_64-unknown-linux-gnu ]]> boost::coroutine 无法昄调用?/title> http://m.shnenglu.com/jinq0123/archive/2014/11/07/208808.html金庆 金庆 Fri, 07 Nov 2014 01:45:00 GMT http://m.shnenglu.com/jinq0123/archive/2014/11/07/208808.html http://m.shnenglu.com/jinq0123/comments/208808.html http://m.shnenglu.com/jinq0123/archive/2014/11/07/208808.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/208808.html http://m.shnenglu.com/jinq0123/services/trackbacks/208808.html boost::coroutine 无法昄调用?br /> Q金庆的专栏Q?br /> 一例因 boost::format() 格式化参C数错误造成?coredump, 因ؓ使用?boost::coroutine, 无法昄异常时的调用栈, 仅显CZ异常的类型:#0 raise() #1 abort() #2 __gnu_cxx::__verbose_terminate_handler() #3 ?? #4 std::terminate() #5 __cxa_throw() #6 boost::exception_detail::clone_impl< boost::exception_detail::error_info_injector< boost::io::too_many_args> >::rethrow() at /usr/include/boost/exception/exception.hpp:466 #7 boost::rethow_exception() at /usr/include/boost/exception/detail/exception_ptr.hpp:458 #8 boost::coroutine::detail::coroutine_base_resume< void(), boost::coroutines::detail::coroutine_base<void()>, void, 0> ::resume(void) at /usr/include/boost/coroutine/v1/detail/coroutine_base_resume.hpp:57 #9 boost::coroutines::detail::coroutine_op<void(), boost::coroutines::coroutine<void(), 0>, void, 0>::operator()(void) at /usr/include/boost/coroutine/v1/detail/coroutine_op.hpp:46 #10 PlayerCoro::operator() at /home/jinqing/mnt/code/server/loginserver/PlayerCoro.h ]]> 双线服务器策略\p|?/title> http://m.shnenglu.com/jinq0123/archive/2014/10/24/208667.html金庆 金庆 Fri, 24 Oct 2014 09:05:00 GMT http://m.shnenglu.com/jinq0123/archive/2014/10/24/208667.html http://m.shnenglu.com/jinq0123/comments/208667.html http://m.shnenglu.com/jinq0123/archive/2014/10/24/208667.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/208667.html http://m.shnenglu.com/jinq0123/services/trackbacks/208667.html 双线服务器策略\p|?br />
Q金庆的专栏Q?/p>
电信|通双U服务器Q发现只有电信用戯q,|通不通?br />l运l检查,发现是策略\由没做好?br />d了策略\由后正怺?br /> 双线服务器有2个外|网卡,一个配电信IP, 一个配|通IP. {略路由让电信网的数据走电信|卡Q电信网? |通的数据走网通的|卡Q网通网兟?br /> 配置Ҏ如下Q?br /> 1. 创徏 /etc/rc.d/route.sh 需要更攚w面的|关地址和服务器地址.#!/bin/bash echo '1' > /proc/sys/net/ipv4/ip_forward sed -i -e '/252 dianxin/d' /etc/iproute2/rt_tables sed -i -e '/251 wangtong/d' /etc/iproute2/rt_tables echo '252 dianxin' >> /etc/iproute2/rt_tables echo '251 wangtong' >> /etc/iproute2/rt_tables IF_DIANXIN=eth1 IF_WANGTONG=eth2 GW_DIANXIN=222.73.123.129 GW_WANGTONG=112.65.123.129 IP_DIANXIN=222.73.123.45 IP_WANGTONG=112.65.123.45 ip route flush table dianxin ip route flush table wangtong ip route add default via $GW_DIANXIN dev eth1 table dianxin ip route add default via $GW_WANGTONG dev eth2 table wangtong ip rule add from $IP_DIANXIN table dianxin ip rule add from $IP_WANGTONG table wangtong ip rule add fwmark 1 table dianxin ip rule add fwmark 2 table wangtong 2. chmod 755 /etc/rc.d/route.sh 赋权 3. 执行一?/etc/rc.d/route.sh 4. /etc/rc.d/rc.local文g中加?etc/rc.d/route.sh, 使之开机启?br /> 如果按照q个办法发现端口不通。只?U可能?br />1、脚本里面IP写错了?br />2、服务器本地没有启动端口?br />3、本地防火墙挡住了?br />4、交换机端口没有开放?br /> 光因网兛_错,脚本执行报错Q?br />RTNETLINK answers: no such process |关Ҏ后就没有错了?br /> 开通交换机端口和网兛_址询问运营^台的同事?/div> ]]> 内核自动分配端口可?/title> http://m.shnenglu.com/jinq0123/archive/2014/10/07/208507.html金庆 金庆 Tue, 07 Oct 2014 09:38:00 GMT http://m.shnenglu.com/jinq0123/archive/2014/10/07/208507.html http://m.shnenglu.com/jinq0123/comments/208507.html http://m.shnenglu.com/jinq0123/archive/2014/10/07/208507.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/208507.html http://m.shnenglu.com/jinq0123/services/trackbacks/208507.html 内核自动分配端口可?br /> Q金庆的专栏Q?br /> 因ؓ单机开多区试Ӟ因ؓTcpq接比较多,很容易出现端口号被占用而无法开启服务进E的情况?br />例如某个q程q接MySql本地端口号ؓ34567Q正好该端口是另一个服务进E的监听端口?br />本地端口h内核自动分配的一个空闲端口?br />内核自动分配端口可围配|于 /proc/sys/net/ipv4/ip_local_port_range 它的值应该是32768?1000?br />所以服务进E的监听端口号应该配成小?2768?br /> ]]> gcov辅助脚本 http://m.shnenglu.com/jinq0123/archive/2014/09/26/208428.html金庆 金庆 Fri, 26 Sep 2014 13:02:00 GMT http://m.shnenglu.com/jinq0123/archive/2014/09/26/208428.html http://m.shnenglu.com/jinq0123/comments/208428.html http://m.shnenglu.com/jinq0123/archive/2014/09/26/208428.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/208428.html http://m.shnenglu.com/jinq0123/services/trackbacks/208428.html gcov辅助脚本 Q金庆的专栏Q?br /> 代码覆盖试查看l果Ӟ需要进入代码所在目录,调用gcovQ然后vi查看?br /> 因ؓ代码目录l构复杂Q进出子目录太麻烦,所以用以下脚本直接生成与查看?br /> 一般是用TSVN列出有更改的文gQ将文g列表复制到文本,然后复制其中的CPP文g名作为参敎ͼ在代码根目录下执行脚本?br />#!/bin/sh # gcov.sh # Usage: gcov.sh abc.sh # Find file and cd to it, then call gcov and vim the result. if [ $# -eq 0 ] then echo Usage: $0 SOURCE_FILE echo Example: $0 abc.cpp exit fi DIR=`find . -name $1.gcda -exec dirname {} \;` cd ${DIR} gcov $1.gcda vim +/##### $1.gcov 说明Q?br />find 在当前目录下查找文g?br />dirname 在查扄果中获取目录?br />cd q入目录 gcov 在该目录下执?gcov vim 打开gcov输出文gQ参?+/##### 用于查找 ##### q蟩到该行?br /> ##### 是源代码未执行的标记?br /> 该脚本不能处理多个文件具有相同文件名的情c?br /> ]]> shell脚本整段注释 http://m.shnenglu.com/jinq0123/archive/2014/04/01/206413.html金庆 金庆 Tue, 01 Apr 2014 01:55:00 GMT http://m.shnenglu.com/jinq0123/archive/2014/04/01/206413.html http://m.shnenglu.com/jinq0123/comments/206413.html http://m.shnenglu.com/jinq0123/archive/2014/04/01/206413.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/206413.html http://m.shnenglu.com/jinq0123/services/trackbacks/206413.html 摘自Qhttp://zhidao.baidu.com/link?url=XmCCZmfluRe6n8TjPRKJTx4GGOUPSGX1VNBm-euqGdpKGpveTESxC0HL90UBNT5nZCvmvfq2oIJdP3JO5EoPSq 利用shellI句注释整D代?br /> : << COMMENTBLOCK shell脚本代码D?br />COMMENTBLOCK q个用来注释整段脚本代码?: 是shell中的I句?br /> ]]> gcov l计 inline 函数 http://m.shnenglu.com/jinq0123/archive/2014/02/28/205983.html金庆 金庆 Fri, 28 Feb 2014 04:36:00 GMT http://m.shnenglu.com/jinq0123/archive/2014/02/28/205983.html http://m.shnenglu.com/jinq0123/comments/205983.html http://m.shnenglu.com/jinq0123/archive/2014/02/28/205983.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/205983.html http://m.shnenglu.com/jinq0123/services/trackbacks/205983.html gcov l计 inline 函数
Q金庆的专栏Q?/p>
gcov可以l计 inline 函数Q可是实际用中到l计ơ数L?的现象?/p>
假设cA的头文g?A.h, 实现文g?A.cpp.
A 有几?inline 成员函数定义?A.h 中?/p>
使用 gcov l计 A 的代码覆盖率Ӟ可能会发?A.h 中的 inline 成员调用ơ数为空??/p>
除了实未调用的原因Q可能是 gcov l计的对象错了?/p>
"gcov A.cpp" l计的是 A.cpp 中实现的函数代码Q如?A.cpp 中未调用自n?inline 函数Q统计结果确实ؓ0?/p>
只有到这?inline 的调用方 cpp 文g中去l计Q才会有惌的结果?/p>
例如QB.cpp 中调用了 A ?inline 函数Q?gcov B.cpp" 才会l计?inline 代码.
参考:
另外QCMake 构徏?o文g命名不是 A.o, 而是 A.cpp.o, 所?/p>
gcov A.cpp
会报 A.gcno 不存在?/p>
实际文g应该?A.cpp.gcno.
把它复制?A.gcno p了?/p>
或者用
gcov A.cpp.gcda
不知Z么,可以直接?gcda 文g作ؓ输入?/p>
或?/p>
gcov -o A.cpp.o A.cpp
q样应该是标准的调用方式?/p>
]]>Linux~译Windows׃n目录下代?/title> http://m.shnenglu.com/jinq0123/archive/2014/02/26/205948.html金庆 金庆 Wed, 26 Feb 2014 03:47:00 GMT http://m.shnenglu.com/jinq0123/archive/2014/02/26/205948.html http://m.shnenglu.com/jinq0123/comments/205948.html http://m.shnenglu.com/jinq0123/archive/2014/02/26/205948.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/205948.html http://m.shnenglu.com/jinq0123/services/trackbacks/205948.html Linux~译Windows׃n目录下代?br /> Q金庆的专栏Q?br /> 万神服务器代码是跨^台的。^时策划在Windows上开自己的服务器试Q测试和发布服务器ؓLinux. 开发时Q先在Windows上编译测试,再到Linux上编译测试?br />因ؓ用VC开发,可以使用VAssist, MetalScroll工具辅助Q开发效率高?br /> VC~译通过Qgcc~译仍会有出错?br />用CMake构徏Ӟ~译目录与源码目录是分开的,q样可以在 Linux 上编?Windows ׃n目录下的代码?br />工作目录在Windows上,Linux下编译时Q可以读取Windows下共享的工作目录源码?br />~译时只需d׃n目录下的源码文gQ不需要写׃n目录Q所以编译速度不会下降太多?br /> 假设Windows下的工作目录?d:\Game, ׃n?\\192.168.1.2\Game. ?Linux ?mount 该共享目录: mount //192.168.1.2/Game ~/Game -o user=jinqing 假设 Linux 上编译目录ؓ ~/build/debug/, 在该目录下运?cmake cmake ~/Game/code -DCMAKE_BUILD_TYPE=Debug 然后 make Win7上共享到 Linux 比较ȝQ?因ؓ默认不开理׃nQ需要开几个讄Qƈ修改注册表?br />可参考:Linuxq接至Win7׃n文g?( http://www.examw.com/linux/all/158013/ ) 需要将2个系l的旉校对下,不然可能不能触发make, 或者时钟警告?br /> 因ؓWindows下文件名不区分大写Q所?#include 文g名中大小写错误无法检?br /> ]]> log4xx/log4j异步日志配置CZ http://m.shnenglu.com/jinq0123/archive/2013/12/04/204580.html金庆 金庆 Wed, 04 Dec 2013 04:05:00 GMT http://m.shnenglu.com/jinq0123/archive/2013/12/04/204580.html http://m.shnenglu.com/jinq0123/comments/204580.html http://m.shnenglu.com/jinq0123/archive/2013/12/04/204580.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/204580.html http://m.shnenglu.com/jinq0123/services/trackbacks/204580.html
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
< log4j:configuration xmlns:log4j ='http://jakarta.apache.org/log4j/' debug ="false" >
< appender name ="ROLLING" class ="org.apache.log4j.RollingFileAppender" >
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern" value ="%d %5p %c %x - %m%n" />
</ layout >
< param name ="File" value ="/var/log/4j/log_gsX.log" />
< param name ="MaxFileSize" value ="50MB" />
< param name ="MaxBackupIndex" value ="9" />
</ appender >
< appender name ="DAILY_LUA" class ="org.apache.log4j.DailyRollingFileAppender" >
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern" value ="%d %5p %c %x - %m%n" />
</ layout >
< param name ="File" value ="/var/log/4j/log_gsX_lua.log" />
< param name ="DatePattern" value ="'.'yyyy-MM-dd" />
</ appender >
< appender name ="CONSOLE" class ="org.apache.log4j.ConsoleAppender" >
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern" value ="%d %5p %c %x - %m%n" />
</ layout >
< param name ="Threshold" value ="info" />
</ appender >
< appender name ="ASYNC" class ="org.apache.log4j.AsyncAppender" >
< param name ="BufferSize" value ="100000" />
< param name ="Blocking" value ="false" />
< appender-ref ref ="ROLLING" />
< appender-ref ref ="CONSOLE" />
</ appender >
< appender name ="ASYNC_LUA" class ="org.apache.log4j.AsyncAppender" >
< param name ="BufferSize" value ="100000" />
< param name ="Blocking" value ="false" />
< appender-ref ref ="DAILY_LUA" />
</ appender >
< root >
< level value ="info" />
< appender-ref ref ="ASYNC" />
</ root >
< logger name ="Lua" >
< level value ="info" />
< appender-ref ref ="ASYNC_LUA" />
</ logger >
< logger name ="main" >
< level value ="info" />
</ logger >
< logger name ="THSever" >
< level value ="debug" />
</ logger >
</ log4j:configuration >
ASYNC异步输出到ROLLING和CONSOLE?/p>
另外QLua日志异步输出为每天一个的独立日志?/p>
默认仅输出INFO日志QTHServer日志c输出DEBUG日志?/p>
CONSOLE屏蔽DEBUG日志?/p>每个服务器用相cM的配|,仅输出文件名不同。可用如下Shell脚本生成各个配置文gQ?br />
for i in { 2 .. 32 } do sed ' s/gsX/gs ' ${i} ' /g ' log4j_gsX.xml > log4j_gs${i}.xml done
]]> 关于C++E序的编码问?/title> http://m.shnenglu.com/jinq0123/archive/2013/11/29/204516.html金庆 金庆 Fri, 29 Nov 2013 09:08:00 GMT http://m.shnenglu.com/jinq0123/archive/2013/11/29/204516.html http://m.shnenglu.com/jinq0123/comments/204516.html http://m.shnenglu.com/jinq0123/archive/2013/11/29/204516.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/204516.html http://m.shnenglu.com/jinq0123/services/trackbacks/204516.html 转自Q?http://blog.chinaunix.net/uid-26790551-id-3190813.html
我们传统的程序基本都只在Windows或只在Linux下运行,WindowsE序使用?br />中文GB18030~码QLinuxE序则只使用英文Q多q以来这些程序运行v来都没有 问题?/font>
q年来,随着E序的组件化Q部分代码特别是公用lg都需要同时支持Windows 及Linuxq_Q这样就出现了不同程度的~码问题Q例如在~译时编译器报错Q?br />或者在q行时出Cؕ码。这些问题都和程序选用的字W编码不正确有关?/font>
本文要地分析了C++的一些字W编码问题,q提供了的方案。受l验和时 间的限制Q有些内容可能不一定全面,仅供大家参考?/font>
1. C++源文件的~码需要特别考虑吗?
1.1. 几个相关概念
C++源文件的~码
指的是C++源程序文Ӟ.cpp/.hQ本w用什么字W编码(GB18030/UTF-8{)?
C++E序的内?
~译后,C++中的字符串常量都会变成一串字节存攑֜可执行文件中。这个内 码指的就是在可执行文件中Q字W串以什么编码进行存放。这里的字符串常?br />指的是窄字符QcharQ而非宽字W(wchar_tQ。宽字符通常是以UnicodeQVC 使用UTF-16BEQgcc使用UTF-32BEQ存放?
q行环境~码
指的是执行程序时Q操作系l或l端所使用的编码。程序中输出的字W最l要 转换行环境编码才能正显C,否则׃出现q?
1.2. 各种环境下通常使用的编?/strong>
C++源文件的~码
通常在简体中文Windows环境下,各种~辑器(包括Visual StudioQ新建文件的 ~省~码都是GB18030Q所以不特别指定的话QWindows环境下C++源文件的~码 通常为GB18030?/font>
而在Linux环境下,最怋用,也是推荐使用的是UTF-8~码?/font>
C++E序的内?/font>
一般来_我们常用的简体中文版VC所使用的内码是GB18030Q而gcc/g++使用?br />内码~省是utf-8Q但可以通过-fexec-charset参数q行修改?/font>
Note
可以通过在程序中打印字符串每个字节十六进制Ş式来判断E序所使用的内码?/font>
q行环境~码
我们常用的简体中文版Windows的环境编码是GB18030Q而Linux下最常用的环?br />~码是UTF-8?/font>
1.3. q几个编码之间的关系
源程序需要由~译器编译ؓ目标文gQ目标文件运行后输出信息到终端,因此q?br />几个~码之间存在一些的兌Q?/font>
+--------+ | 源程?|----------源文件编?+---+----+ | ~译器编?+---+----+ |目标文g|----------E序内码 +---+----+ | q行后输Z?+---+----+ | 输出 |----------q行环境~码 +--------+
在这q程中,如果有一个环节出现问题,׃DE序的输出发生异常,产生?br />码或其它更严重的后果?/font>
2. 源文件应该采用什么编码?
2.1. ~译器对不同源文件编码的支持一样吗Q?/strong>
gcc (v4.3.2 20081105):
支持UTF-8~码的源文gQUTF-8~码的源文g不能 有BOM?/font>
vc2003:
支持UTF-8~码的源文gQUTF-8~码的源文g可以有BOMQ也可以没有?/font>
如果源文件用UTF-8~码的话Q?strong>必须?/strong>BOM?/font>
Note
gcc提供?finput-charset参数可以指定源文件的字符~码Q但׃标准 头文仉是ascii~码的,因此如果要引用标准头文g的话Q源代码的编码必d容ascii。而vc未能扑ֈcM的选项?/font>
2.2. 源文件应该采用什么编码?
很多文章都推荐C/C++代码中只使用ascii字符Q如果有非ascii字符可以用\xHH 或\uXXXX表示。注释中使用utf-8~码。也可以使用 gettext 把非ascii字符串放到单独的语言文g中,而在源代码中只保留ascii字符?/font>
在实践中Q由于\xHH或\uXXXX{方式很不直观,Ҏ出错且不易发玎ͼ而未必所 有程序都需要支持多语言Q因此未必想引入gettext或类似的解决Ҏ。在q样 的情况下Q大安习惯在源E序文g中直接写入中文等非ascii字符Q这需?br />选择一U至能被gcc和vc接受的文件编码?/font>
本来QUnicode是解军_语言问题的最好选择Q而UTF-8׃与ASCII兼容Q也?br />最通用的Unicode~码方式Q但从上面的资料中可见,如果用UTF-8的话QgccQ?br />臛_是低版本Q不允许有BOMQ而vc2005 以上要求必须有BOMQ因此同一个文?br />无法在gcc及vc下通过~译QUTF-8g不是一个好的选择。但如果使用gcc比较 高的版本Q?.4.0以上Q)Q用带BOM的UTF-8~码文g应该也是可行的?/font>
考虑到目前现Ӟ我们一般都在简体中文Windows下工作,源文件中使用GB18030 ~码g是一个比较现实的选择。在vc下可以直接编译,而在gcc下也可以通过 增加~译选项-finput-charset=gb18030予以支持。而且Ҏl基癄中GB18030 的词条内容,GB18030 is a superset of ASCII and can represent the whole range of Unicode code pointsQGB18030向后兼容ASCIIQƈ且能表示所有的 Unicode码点Q,因此使用GB18030有够的表达能力Q可以表C所有的Unicode 字符。用GB18030的唯一~点是在非体中文版本的VC下,׃无法指定?br />文g的编码,因此有可能无法正识别此~码的源文g?/font>
3. 应该使用什么程序内码?
正如前面提到的,C++有窄字符QcharQ和宽字W(wchar_tQ的分别Q分别有一 套相应的cd函数Qstring/cout/strlen与wstring/wcout/wcslen{)。前者在 不同的编译器下有不同的缺省编码(体中文vc是GB18030Qgcc是UTF-8Q,?br />者一般都使用UnicodeQ其中vc下用UTF-16Qgcc~省使用UTF-32?/font>
C++在输出窄字符时会按程序内码原栯出,不会q行~码转换Q因此在使用H?br />字符时要求程序内码与q行环境~码一_q样才不会出Cؕ码。由于简体中?br />版vc的程序内码是GB18030Q因此用窄字符的vcE序只能q行在GB18030环境?br />。同P׃gcc~省使用UTF-8作ؓE序内码Q因此用窄字符的gccE序只能 q行在UTF-8的终端环境下。(q里说的都是在源代码中直接写中文{非ascii?br />W的E序。用前面提到的gettext及其它工P使用H字W的E序也可以在不同 ~码的运行环境中正确输出中文Q?/font>
C++在输出宽字符时会自动转换行环境的~码Q因此只要正设|了q行?br />境编码,同一个程序就可以在不同编码的q行环境中正显CZ文。这一点与 Java/.Net很象QJava/.Net的字W串cd都用UnicodeQ在输入/输出旉需?br />与当前运行环境的~码q行互{?/font>
一般来_如果需要支持多语言Q有两种比较好的做法Q?/font>
使用H字W,但源E序中只使用ascii字符Q非ascii字符通过gettext或其?br />工具攑ֈ单独的文件中Q由gettext{工具处理编码{换的问题?
使用宽字W?
Note
如果E序中需要一些固定字W编码的字符串常量,例如固定是GB18030 ~码的字W串帔RQ这些常量应该以\xXX的方式存攑֭W串帔RlGB18030~码后的内容Q这L内容才不会被转换为程序的内码Q也不会转换行环境编码?/font>
4. q行环境应该用什么字W编码?
正如上面提到的,使用H字W和使用宽字W的E序对运行环境的字符~码要求?br />不一L?/font>
使用宽字W,只要在程序中正确讄当前环境的字W编码(一般通过locale::global(locale("")) q行讄Q,C++标准库会在输入、输出时?br />进行字W编码{换,因此可以适应各种~码的运行环境?/font>
使用H字W,但程序中不出现非ascii字符的话Q对q行环境没有特别要求Q?br />可以适应各种~码的运行环境?
使用H字W,E序中也直接使用汉字{非ascii字符的话Q由于C++标准库会?br />目标文g中保存的字符Ԍ以程序内码保存)直接输出Q不会进行字W编码{换,因此要求q行环境的编码与E序内码一致。即体中文VC~译的程序只能运行在GB18030环境下,gcc~译的程序只能运行在UTF-8环境下(可以在编译时通过-fexec-charset参数q行修改Q?
5. C++源文件编码的选择
5.1. 几种可行做法
Ҏ上面的讨论,目前看来Q要兼容Windows/LinuxQVC/gcc的话Q有几种做法 Q?/font>
使用H字W,源程序中只用ascii字符Q非ascii字符Q如中文{通过 gettext{工h到单独的语言包中?
使用H字W,源程序中允许使用非ascii字符?
使用宽字W,源程序中允许使用非ascii字符?
兼容各种~码的运行环境?
Ҏ源程序用的~码不同Q对~译器的兼容性也不同Q?
使用H字W,源程序用带BOM的UTF-8~码?
兼容VC各语U的各版本?
兼容gcc 4.4.0以上版本?
使用H字W,源程序用GB18030~码?
5.2. 推荐做法
Ҏ我们的现Ӟ对于需要支持多语种的程序,使用H字W,源程序中只 用ascii字符?/font>
对于不需要支持多语种的程序,考虑到重用已有的代码Q可以考虑使用H字W, 采用GB18030~码Q但只能q行在GB18030~码的Windows环境及UTF-8~码?br />Linux环境下?/font>
6. 其它问题
6.1. 用户输入、输出及持久?/strong>
׃用户输入、输出及从文件、网l等设施d的数据在E序底层看来都是字节 ,因此存在在输入时如何把这些字节流解释成有效的信息Q在输出时怎么把程 序中的信息{换ؓ正确的字节流的问题?/font>
如果E序本n不需要处理这些数据,只是把数据从一个来源搬到另一个地方( 如把用户输入保存到文Ӟ或者从一个流dQ写到另一个流{)Q而输入的字符~码与输出的字符~码一致的话,E序不需要对数据q行M~码转换Q只需要把d的数据按原样写到输出卛_Q数据的字符~码与程序的~码没有关系?
比如|站应用E序Q只需要保证用户页面用UTF-8~码Q数据库、数据文件也都用UTF-8~码Q那么用戯入的数据可以直接写入数据库及数据文gQ从数据库或数据文g中读取的数据也可以直接展现给用户Q不需要进行编码{换?/font>
如果E序需要在一定程序上Ҏ据进行处理(如需要判断字W个数、对字符q?br />行比较、在字符串上附加或去掉内容)Q就要把数据转换ZU明的字符~码Q一般来说是E序内码Q再q行处理Q在处理后再转换为所需的字W编码进行输出?
对于宽字W程序,如果只需要处理采用当前运行环境字W编码的数据Q可以通过ios::imbue()可以指定io的字符~码Q在输入、输出时C++标准库会自动在所指定的字W编码与E序内码之间q行~码转换。如果不使用的话,也可以通过标准的wcstombs()或mbstowcs()函数q行当前~码Q通过locale::global()或setlocale()指定Q与宽字W之间的转换?/font>
对于H字W程序,如果数据的字W编码与E序内码一致也不需要进行编码{换,直接处理卛_?
对于其它情ŞQ需要引入iconv或类似的字符~码转换库,以便实现不同 字符~码之间的{换?
6.2. gettext、iconv的替代品
׃gettext及iconv都属于GNU ProjectQ考虑到版权因素,q所有程序,特别是商业程序,都适合使用q些库。在Boost 1.48.0中,Boost.Locale库首ơ正式发布,该库提供了gettext、iconv的功能,q在此基上进行了增强Q提供了大小写变换、字W顺序比较、时间的处理 、分词、数字的格式化输?输出、消息格式化、多语种支持、字W编码{换等功能Q值得q一步研I及使用?/font>
]]> CMaked-D_DEBUG? http://m.shnenglu.com/jinq0123/archive/2013/07/26/202141.html金庆 金庆 Fri, 26 Jul 2013 08:33:00 GMT http://m.shnenglu.com/jinq0123/archive/2013/07/26/202141.html http://m.shnenglu.com/jinq0123/comments/202141.html http://m.shnenglu.com/jinq0123/archive/2013/07/26/202141.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/202141.html http://m.shnenglu.com/jinq0123/services/trackbacks/202141.html Linux下Debug版不会自动添?_DEBUG宏,只有NDEBUG宏可用?/p>
cmake ../src _DCMAKE_BUILD_TYPE=Debug -D_DEBUG
会报错: -D_DEBUG should be: VAR:type=value
需?D_DEBUG=1.
改ؓ在CMakeLists.txt中添加:
if (CMAKE_BUILD_TYPE STREQUAL Debug)
add_definitions(
-D_DEBUG
)
endif ()
]]>Win7讉KRedhat samba׃n http://m.shnenglu.com/jinq0123/archive/2012/09/17/190955.html金庆 金庆 Mon, 17 Sep 2012 03:37:00 GMT http://m.shnenglu.com/jinq0123/archive/2012/09/17/190955.html http://m.shnenglu.com/jinq0123/comments/190955.html http://m.shnenglu.com/jinq0123/archive/2012/09/17/190955.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/190955.html http://m.shnenglu.com/jinq0123/services/trackbacks/190955.html Win7讉KRedhat samba׃n
首先是开启samba:
service smb start
service smb restart
samba的配|文件是/ect/samba/smb.conf, 几乎不用改,使用默认配置p了?/p>
默认是?security=user 模式׃nQ需要输入用户名密码才能讉K?/p>
默认有[homes]׃n配置Q各个用户可讉K自己的主目录?/p>
如添加新用户Q?/p>
useradd jinqing
passwd jinqing
smbpasswd -a jinqing
smb需要自q用户密码Q需用smbpasswd讄?/p>
q样共享了/home/jinqing.
试Qsmbclient //localhost/jinqing -Ujinqing
需要设|Selinux参数Q以允许׃n讉KQ可参照smb.conf中的注释q行Q?/p>
setsebool -P samba_enable_home_dirs on
然后是win7需要设|安全策略,不然也会q不上?br />
打开理工具Q?#8220;本地{略”->“安全选项”->“|络安全QLAN Manager w䆾验证U别”Q?br />单击列表中:发送LM和NTLMv2Q如果已协商Q则使用NTLMv2协议?br />
]]>CMake生成版本?/title> http://m.shnenglu.com/jinq0123/archive/2012/08/15/187268.html金庆 金庆 Wed, 15 Aug 2012 04:30:00 GMT http://m.shnenglu.com/jinq0123/archive/2012/08/15/187268.html http://m.shnenglu.com/jinq0123/comments/187268.html http://m.shnenglu.com/jinq0123/archive/2012/08/15/187268.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/187268.html http://m.shnenglu.com/jinq0123/services/trackbacks/187268.html CMake生成版本?br /> Q金庆的专栏Q?br /> 原来的CMake需要用shell脚本生成SVN版本P再作为cmake参数传入?br /> CMake调用脚本CZQ?br />#!/bin/sh # cmake.sh ServerCodeRoot=~/Code/Server CodeRevNum=`svn info ${ServerCodeRoot} | grep Revision | awk -F' ' '{ print $2 }'` cmake S{ServerCodeRoot} -DCMAKE_BUILD_TYPE=Release -DVERSION_REVISION=S{CodeRevNum} CMakeLists.txt中如下配|:configure_file( "Version.h.in" "Version.h" ) Version.h.in如下Q?br />#include <string> const std::string VERSION_MAJOY("1"); const std::string VERSION_MINOR("0"); const std::string VERSION_REVISION("@VERSION_REVISION@"); Linux下执行cmake.sh会自动替换SVN版本受?br /> 现改为用FIND_PACKAGE(Subversion)方式Q不必用shell脚本生成SVN版本P q且在Windows上也可以生成版本? cmake调用时不必传VERSION_REVISION参数?br /> CMakeLists.txt改ؓQ参考了开源网游ryzom的CMakeQ:SET(ROOT_DIR ${PROJECT_SOURCE_DIR}) IF(EXISTS "${ROOT_DIR}/.svn/") FIND_PACKAGE(Subversion) IF(SUBVERSION_FOUND) Subversion_WC_INFO(${ROOT_DIR} Project) SET(VERSION_REVISION ${Project_WC_REVISION}) ENDIF(SUBVERSION_FOUND) ENDIF(EXISTS "${ROOT_DIR}/.svn/") CONFIGURE_FILE( "Version.h.in" "Version.h" ) 如果不是SVN, 而是用Hg, 可用如下脚本Q?br />IF(EXISTS "${ROOT_DIR}/.hg/") FIND_PACKAGE(Mercurial) IF(MERCURIAL_FOUND) Mercurial_WC_INFO(${ROOT_DIR} ER) SET(REVISION ${ER_WC_REVISION}) SET(CHANGESET ${ER_WC_CHANGESET}) SET(BRANCH ${ER_WC_BRANCH}) ENDIF(MERCURIAL_FOUND) ENDIF(EXISTS "${ROOT_DIR}/.hg/") ]]> 多线E开启gprof性能试的简易方? http://m.shnenglu.com/jinq0123/archive/2012/08/01/185908.html金庆 金庆 Wed, 01 Aug 2012 08:23:00 GMT http://m.shnenglu.com/jinq0123/archive/2012/08/01/185908.html http://m.shnenglu.com/jinq0123/comments/185908.html http://m.shnenglu.com/jinq0123/archive/2012/08/01/185908.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/185908.html http://m.shnenglu.com/jinq0123/services/trackbacks/185908.html
多线E开启gprof性能试的简易方?/div>
Q金庆的专栏Q?/div>
用到gprof时才知道Q原来gprof只能对主U程l计耗时。manual上也没写U程相关的问题啊Q?/p>
不过有现成的解决ҎQhttp://sam.zoy.org/writings/programming/gprof.html
该方案封装了pthread_create(), 让线E初始化执行一个setitimer(ITIMER_PROF, ...)?/p>
易的Ҏ是直接在代码中写个setitimer()?/p>
#include <sys/time.h> #include <boost/thread.hpp> struct itimerval g_itimer; void foo() { setitimer(ITIMER_PROF, &g_itimer, NULL); for (int i = 0; i < 10000000; i++) (void)i; } int main() { getitimer(ITIMER_PROF, &g_itimer); boost::thread t(&foo); t.join(); return 0; } g++ main.cpp -pg -lboost_thread
./a.out
gprof
q样pl计出foo()的耗时了。没有setitimer()׃会有foo()的耗时l计?/p>
]]>
MySql的CMake选项支持gcov和gprof http://m.shnenglu.com/jinq0123/archive/2012/07/11/182807.html金庆 金庆 Wed, 11 Jul 2012 04:15:00 GMT http://m.shnenglu.com/jinq0123/archive/2012/07/11/182807.html http://m.shnenglu.com/jinq0123/comments/182807.html http://m.shnenglu.com/jinq0123/archive/2012/07/11/182807.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/182807.html http://m.shnenglu.com/jinq0123/services/trackbacks/182807.html 未来的MySql 5.6.6 中,CMake选项中添加了gprof性能试支持Q见Q?br />
http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
ENABLE_GPROF Enable gprof (optimized Linux builds only) OFF 5.6.6
代码库中的CMakeLists.txt 摘录如下Q?/p>
OPTION(ENABLE_GCOV "Enable gcov (debug, Linux builds only)" OFF) IF (ENABLE_GCOV AND NOT WIN32 AND NOT APPLE) SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -lgcov") ENDIF() OPTION(ENABLE_GPROF "Enable gprof (optimized, Linux builds only)" OFF) IF (ENABLE_GPROF AND NOT WIN32 AND NOT APPLE) SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -pg") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -pg") SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -pg") ENDIF() ]]>CMakedgcov代码覆盖试支持 http://m.shnenglu.com/jinq0123/archive/2012/07/11/182790.html金庆 金庆 Wed, 11 Jul 2012 03:11:00 GMT http://m.shnenglu.com/jinq0123/archive/2012/07/11/182790.html http://m.shnenglu.com/jinq0123/comments/182790.html http://m.shnenglu.com/jinq0123/archive/2012/07/11/182790.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/182790.html http://m.shnenglu.com/jinq0123/services/trackbacks/182790.html CMakedgcov代码覆盖试支持
Q金庆的专栏Q?/p>
在根CMakeList.txt中添加ENABLE_GCOV选项Q?br />
OPTION(ENABLE_GCOV "Enable gcov (debug, Linux builds only)" OFF)
IF (ENABLE_GCOV AND NOT WIN32 AND NOT APPLE) SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -lgcov") ENDIF()
以上代码来自MySQL的CMakeLists.txt.
如下执行cmake:
cmake SRC_DIR -DCMAKE_BUILD_TYPE=Debug -DENABLE_GCOV=1
~译后就可以看到图文?*.gcno?/p>
q行后,可以看到数据文g*.gcda生成?/p>执行 gcov main.cpp.gcno q?main.cpp.gcov 试l果?/div>
]]>CMake区分debug、release版本 http://m.shnenglu.com/jinq0123/archive/2012/03/27/169143.html金庆 金庆 Tue, 27 Mar 2012 05:56:00 GMT http://m.shnenglu.com/jinq0123/archive/2012/03/27/169143.html http://m.shnenglu.com/jinq0123/comments/169143.html http://m.shnenglu.com/jinq0123/archive/2012/03/27/169143.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/169143.html http://m.shnenglu.com/jinq0123/services/trackbacks/169143.html 摘自Q?http://m.shnenglu.com/tx7do/archive/2010/08/19/124000.html
建立debug/release两目录,分别在其中执行cmake -DCMAKE_BUILD_TYPE=DebugQ或ReleaseQ,需要编译不同版本时q入不同目录执行make卛_Q?/p>
Debug版会使用参数-gQRelease版?O3 –DNDEBUG
]]>建立Socket Policy服务?/title> http://m.shnenglu.com/jinq0123/archive/2012/01/19/164375.html金庆 金庆 Thu, 19 Jan 2012 08:21:00 GMT http://m.shnenglu.com/jinq0123/archive/2012/01/19/164375.html http://m.shnenglu.com/jinq0123/comments/164375.html http://m.shnenglu.com/jinq0123/archive/2012/01/19/164375.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/164375.html http://m.shnenglu.com/jinq0123/services/trackbacks/164375.html 建立Socket Policy服务?br /> Q金庆的专栏Q?br /> Flash和Unity3D游戏服务器需要开启一个Socket Policy服务器?br />详细说明见:Setting up a socket policy file server http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html 协议如下Q?br />Flash或U3D播放器向Socket Policy服务器发送请求: “<policy-file-request/>\0”Q?br />服务器返回一个xml文本Q其中有包含<cross-domain-policy>配置?br /> Adobe提供了Perl和Python代码。Unity3D提供了CSharp代码?br />cs代码用于Windows. Linux上准备用Python代码?br />在以上网下载:flashpolicyd_v0.6.zip?br />其中?个版本:init服务Qxinetd服务Q独立应用。只需一U即可?br /> 按应用的性质Q请求量极小Q所以最适合应用xinetd. 只需q行其中的install.sh׃安装?br />q需手工?ect/services中添加服务名flashpolicy和端?43. q行以下指o可以试一下,输出应该是配|文件的内容?br />python -c 'print "<policy-file-request/>%c" % 0' | nc 127.0.0.1 843 其实以上试指o在尾部多了个'\n', 不是标准的测试?br />在in.flashpolicyd.py中多了个strip()去除q个'\n'. 实际用U3D试Ӟ因ؓ没有'\n'l尾Q所以in.flashpolicyd.py无法正常工作?br />需要将35行readline()如下更改Q?br /> request = sys.stdin.readline().strip() 改ؓ request = sys.stdin.readline(len('<policy-file-request/>\0')).strip() q样׃需要eol可以读取了?br /> 查看其他两个版本的代码没有这个错误,但是有另一个错误, x可能只读一半的h造成判断出错?br /> q有一个问题是因ؓ服务是由nobodyq行的,环境变量不同Q?br />in.flashpolicyd.py头部?br />#!/usr/bin/env python 明确?br />#!/usr/local/sbin/python 可避免调用低版本的python而报错?br /> ]]> MySQL无法本地q接 http://m.shnenglu.com/jinq0123/archive/2011/10/21/158831.html金庆 金庆 Fri, 21 Oct 2011 08:27:00 GMT http://m.shnenglu.com/jinq0123/archive/2011/10/21/158831.html http://m.shnenglu.com/jinq0123/comments/158831.html http://m.shnenglu.com/jinq0123/archive/2011/10/21/158831.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/158831.html http://m.shnenglu.com/jinq0123/services/trackbacks/158831.html MySQL无法本地q接 Q金庆的专栏Q?br /> Linux重启后,发现不知怎么的MySQL无法本地q接?br /> l果phpMyAdmin, Zentao都无法正常工作了?br /> q程的连接用了TCP是正常的Q本地连接用了本地socket, 有问题?br /> 本地q行mysql客户端会报错Q?br />Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2) 重启mysql服务也报错: # service mysql restart MySQL server PID file could not be found! Starting MySQL... ...The server quit without updating PID file (/var/lib/mysql/localhost/localdomain.pid) ?pid文g不存在。所以无法关闭mysql. 正在q行的mysql服务一直无法关闭?br /> 参考:http://zhujipi.com/vps/109.html 说明QMysql的进E卡MQ这时用p把这些卡ȝq程都关闭?br /> mysql服务重启成功后恢复正常?br /> ]]> 讑֮“svn:needs-lock”属?/title> http://m.shnenglu.com/jinq0123/archive/2011/10/12/158128.html金庆 金庆 Wed, 12 Oct 2011 06:33:00 GMT http://m.shnenglu.com/jinq0123/archive/2011/10/12/158128.html http://m.shnenglu.com/jinq0123/comments/158128.html http://m.shnenglu.com/jinq0123/archive/2011/10/12/158128.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/158128.html http://m.shnenglu.com/jinq0123/services/trackbacks/158128.html 摘自Q?http://www.cnblogs.com/LittleFox/archive/2009/04/08/1431781.html
讑֮“svn:needs-lock”属?br />使用命o行锁?#8220;介绍.doc”Q?br /> svn propset svn:needs-lock 'x' 介绍.doc q?行这个命令后Q?#8220;介绍.doc”已l是讄?#8220;svn:needs-lock ”Q但Z使之生效q要q行“svn commit”Q之后其他用户update的时候就会发现这个文件已l是只读的了。需要注意的是我们设|的属性值是“x”Q实际上L值都可以Q? Subversion会忽略其内容?br /> 使用TortoiseSVN讑֮属性也很简单: “介绍.doc”右键选中- >属?>Subversion选项?>properties->addQ然后在弹出的窗口中的property name选择“svn:needs-lock”QgQ意,然后选择OK。之后再提交“介绍.doc”卛_?/span>
]]> 解决 undefined symbol: php_ini_scanned_files http://m.shnenglu.com/jinq0123/archive/2011/09/26/156861.html金庆 金庆 Mon, 26 Sep 2011 08:25:00 GMT http://m.shnenglu.com/jinq0123/archive/2011/09/26/156861.html http://m.shnenglu.com/jinq0123/comments/156861.html http://m.shnenglu.com/jinq0123/archive/2011/09/26/156861.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/156861.html http://m.shnenglu.com/jinq0123/services/trackbacks/156861.html apache加蝲php时出错: Starting httpd: httpd: Syntax error on line 57 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: undefined symbol: php_ini_scanned_files|上搜烦的所有方法都没有解决q个错误?/p>
最后make clean;make;make install好了?/p>
估计是需要make clean清除上次的错误才行?/p>
]]> 预编译输出的行标?/title> http://m.shnenglu.com/jinq0123/archive/2010/09/15/126636.html金庆 金庆 Wed, 15 Sep 2010 02:53:00 GMT http://m.shnenglu.com/jinq0123/archive/2010/09/15/126636.html http://m.shnenglu.com/jinq0123/comments/126636.html http://m.shnenglu.com/jinq0123/archive/2010/09/15/126636.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/126636.html http://m.shnenglu.com/jinq0123/services/trackbacks/126636.html $cpp main.cpp > main.i
或者:
$gcc -E main.cpp > main.i
生成的行h志中有如下格式的Q? # 1 ?usr/include/features.h?1 3 4 阅读全文 ]]> vi查看制表W?/title> http://m.shnenglu.com/jinq0123/archive/2010/05/17/115584.html金庆 金庆 Mon, 17 May 2010 06:21:00 GMT http://m.shnenglu.com/jinq0123/archive/2010/05/17/115584.html http://m.shnenglu.com/jinq0123/comments/115584.html http://m.shnenglu.com/jinq0123/archive/2010/05/17/115584.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/115584.html http://m.shnenglu.com/jinq0123/services/trackbacks/115584.html 高菜单中有个“查看空白”,我L打开的? 在VI中,也有cM功能Q可以查看TAB及行根{?nbsp; 阅读全文 ]]> Cygwin与MinGW的区?/title> http://m.shnenglu.com/jinq0123/archive/2010/03/29/110795.html金庆 金庆 Mon, 29 Mar 2010 02:25:00 GMT http://m.shnenglu.com/jinq0123/archive/2010/03/29/110795.html http://m.shnenglu.com/jinq0123/comments/110795.html http://m.shnenglu.com/jinq0123/archive/2010/03/29/110795.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/110795.html http://m.shnenglu.com/jinq0123/services/trackbacks/110795.html 阅读全文 ]]> 当心虚函数重?overloaded-virtual) http://m.shnenglu.com/jinq0123/archive/2009/05/22/85378.html金庆 金庆 Fri, 22 May 2009 05:59:00 GMT http://m.shnenglu.com/jinq0123/archive/2009/05/22/85378.html http://m.shnenglu.com/jinq0123/comments/85378.html http://m.shnenglu.com/jinq0123/archive/2009/05/22/85378.html#Feedback 4 http://m.shnenglu.com/jinq0123/comments/commentRss/85378.html http://m.shnenglu.com/jinq0123/services/trackbacks/85378.html Q{载请注明来源于金庆的专栏Q?br> 为网怸王之?(KOK3)服务器添加新功能的时? 发现某个cL员函数应该是const函数, 因ؓ我的const函数要调用该函数, 手加上了const. 再顺便看到该cL好多个明显是getter函数, 所以都加上了const. ~译没错提交了. l果没多久测试就发现了新版本的一个错? 表现在其他功能上, 但由同事U错后发现是我添加const的后? 原来dconst的成员函C, 有一个是virtual函数, 加了const后与子类的函数原型就不符? 子类的函数成为父c虚函数的一个重? 使virtual失效, 多态性无法表现出? 解决Ҏ是子类的相应虚函数中也dconst. 教训: 更改虚函数原型时, 必须同时更改父类和子c? gcc中有?Woverloaded-virtual警告选项, 会报告这U虚函数重蝲. 我在Makefile中打开?Woverloaded-virtual, 再次~译时就产生了许多警? 大多数警告是正确的函数重? 但还是发C一个与我相同的错误, q次是函数参数const有区? 我发l相关h员处理了. 因ؓ开?Werror, 所有警告都会造成~译p|, 所以我们不能在Makefile中加?Woverloaded-virtual警告选项. 代码CZ:class A { virtual void f() {}; }; class B : public A { virtual void f() const {}; }; int main() { return 0; } $ g++ main.cpp -Woverloaded-virtual main.cpp:3: warning: `virtual void A::f()' was hidden main.cpp:8: warning: by `virtual void B::f() const' Google的代码规范中要求所有子cȝ虚函C都加上virtual, 是很有道理的. 虽然只要与父c虚函数{相同, 加不加virtual都是虚函? 但是以后更改函数{? 看到virtual很容易知道它是虚函数, 需要父cdcd时更?
]]>pthread_rwlock使用错误 http://m.shnenglu.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html金庆 金庆 Fri, 14 Nov 2008 02:47:00 GMT http://m.shnenglu.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html http://m.shnenglu.com/jinq0123/comments/66884.html http://m.shnenglu.com/jinq0123/archive/2008/11/14/pthread_rwlock_abuse.html#Feedback 1 http://m.shnenglu.com/jinq0123/comments/commentRss/66884.html http://m.shnenglu.com/jinq0123/services/trackbacks/66884.html 阅读全文 ]]> UNIX 技?/title> http://m.shnenglu.com/jinq0123/archive/2008/07/30/UnixTricks.html金庆 金庆 Wed, 30 Jul 2008 01:00:00 GMT http://m.shnenglu.com/jinq0123/archive/2008/07/30/UnixTricks.html http://m.shnenglu.com/jinq0123/comments/57488.html http://m.shnenglu.com/jinq0123/archive/2008/07/30/UnixTricks.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/57488.html http://m.shnenglu.com/jinq0123/services/trackbacks/57488.html * 利用位置变量 $0 昄Shell? * bash中输入一半文件名Q用TAB键自动补? * ! 历史扩展
* ?pushd ?popd 在目录树中导? * 查找大于 10MB 的所有文? 阅读全文 ]]> Unix~程哲学 http://m.shnenglu.com/jinq0123/archive/2007/08/29/UnixPhilosophy.html金庆 金庆 Wed, 29 Aug 2007 07:32:00 GMT http://m.shnenglu.com/jinq0123/archive/2007/08/29/UnixPhilosophy.html http://m.shnenglu.com/jinq0123/comments/31159.html http://m.shnenglu.com/jinq0123/archive/2007/08/29/UnixPhilosophy.html#Feedback 0 http://m.shnenglu.com/jinq0123/comments/commentRss/31159.html http://m.shnenglu.com/jinq0123/services/trackbacks/31159.html 阅读全文 ]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
һɫþۺƷĦ |
ŷһƵ |
ģдһ |
ŷ߲Ÿ徫Ʒ |
ϳ˾Ʒ˳վ |
ŷһƵ߹ۿ |
þþƷһ |
þƵѹۿ |
ŷƵվŷ |
ɫ߿ |
ձ |
ŷƵ߹ۿһ |
ҹþþ |
þþƷŷˬ |
ŷһƬaaaaaaaƵ |
þð91ҹ |
ŮƷվ |
ƷƷ |
ݺɫۺһ |
պŷ |
ŷպۺ |
þӰԺ |
ҹҹƷƵ |
þۺϺݺۺϾþü |
ŷպ߲ |
ŷպ߹ۿ |
Ʒһӣ |
ŷպƷþɫӰ |
ŷӰԺ |
avۿ |
þþƷһ |
av |
պһ |
߹ۿ |
ŷӰ߲ |
һһһav |
ŷƷ97 |
Դ |
ŷƵ߲ѹۿ |
պƵ |
ŷһƷ |
Ʒþþþþþþý |
ŷպۺ |
þþƷ91 |
þ |
ŷɫaƵһպƷ |
һɫݾƷƵѿ |
þþþһ |
ŷպһ |
ŷļӰվ |
99ƷƵ |
һ |
þþþۺ |
˾ƷŷһСƵ |
ƵƵ |
99Ʒһţ |
һƵ߹ۿ |
㽶þҹɫƷ |
ջպav |
ҹƬһ |
Ʒ |
ҹһ |
|
ŷһɫͷ |
|
һ |
ŷպ˸Ƶ |
Ůav߲ |
˳վ߲ |
߹ۿպav |
xxxx137 |
ŷ龫Ʒþþþþô߶ |
þþƷ5555 |
ѿ |
¹͵Ʒվ |
ŷƷҹ |
ŷĻ |
ŷһ13˾ |
һ㶮 |
ȳƵ |
߿һ |
ۿ |
㽶þþƷҹҹ |
1000Ʒþþþþþþ |
Ʒþ7777 |
ŷպٸ |
þó˾ƷӰ |
þۺ |
պƵһ߲ѹۿ
|
߹ۿƵ |
ŷƵ |
ƷvŷƷvձƷ |
ҹպ߹ۿ |
þӰԺ |
ĵӰ |
Ƶ |
ŷһ |
ŷƷvպƷvƷ
|
Ƶ߹ۿ |
ŮƵ߹ۿ |
ÿĻ |
99re6ֻоƷƵ߹ۿ
99re6ֻоƷ
|
ƷƵһ |
Ʒþþþþ
|
ŷպҹƵ߹ۿ |
ŷ߹ۿվ |
ŷƬѹۿ |
ŷҹƷþþþþи |
Ʒ߹ۿ |
ۺ |
ŷ߹ۿ |
þùƵ |
ŷɫͼһ |
Ʒþþþ |
һƵ |
Ƶh |
Ƶ1 |
ŷһ |
ŮھƷԲ߲ |
ƷƵ |
߾þۺһ |
ÿպƵ |
߲ |
Ƶ |
ŷҹ߹ۿ |
þó |
պŷƵһ |
ŷ պ һ |
鶹ۺ |
Ʒ1234 |
ŷһ߿ |
ŷƵ |
ŮԸƵþþ |
Ʒþþþþó
|
ŷbt |
ŷƬ1ҳ |
ŷƵպ |
ԴƷ߹ۿ |
þùһ |
ŮƷ߹ۿ |
߿Ƭŷ |
ŷһ |
ŷɫ |
þ |
պ |
պ߹ۿ |
ĶŷС˵ |
Ʒһ
|
Ӱav |
һþaþۺ |
ŷպƷƵ |
СƵ߹ۿ |
þòĻ |
Ӱȷպ |
ŷ߹ۿ |
պƵһ߲ѹۿ |
ëƬav |
ƷëƬ߿ |
㽶Ʒ͵߹ۿ |
þþþþþۺ |
Ůɫ |
Ʒ |
þԴһţ
|
99ƵƷ |
ŷһѹۿ |
Ƶһ |
Ʒþþ |
|
þþƷһ |
ۺ |
Ʒһ |
þ |
һɫ**ۺƷ |
þùƷ99Ʒ |
ɫѵӰ |
ŷպĻƵ |
ŷ߰v |
99ۺϾƷ |
һɫ |
þþùһ |
պдƵ߹ۿ |
ھƷþþ |
ŷպ߿ |
þùƷ˿ |
99Ʒ99þþþþ÷ |
þþƷa |
һ |
߹ۿŷһ |
Ʒһ |
ŷƷ |
þþƷƷ |
ŷձɫ |
˾Ʒ |
ĢƵһ |
ŷպƷ |
һƷ |
99Ʒ߹ۿ |
һר |
ʵƷþö |
Ʒһ |