printf格式输出:%[flags][width][.perc][F|N|h|l]type

用到了flags中的 0 (注意是零不是欧) ,其百科描述为:将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)

width 即表示需要输出的位数。


int a = 4;
printf("%03d",a);
输出:004

也可以用 * 代替位数,在后面的参数列表中用变量控制输出位数;


int a = 4;
int n = 3;
printf("%0*d",n,a);
输出:004

来自:http://blog.chinaunix.net/uid-26295753-id-2981750.html
背景:试着在centos7里调试一下c程序,出现,Missing separate debuginfos, use: debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 glibc-2.17-78.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 nss-softokn-freebl-3.16.2.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64

问题:
Missing separate debuginfos, use: debuginfo-install glib
解决方法:
在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686

实践如下过程:
uname -rsp
Linux 3.10.0-229.1.2.el7.x86_64 x86_64

http://debuginfo.centos.org/7/x86_64/
(例如本机uname -r 3.10.0-229.1.2 只能选 kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm


安装debuginfo
rpm -ivh kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm
rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm

配置yum源
or this to work, you need to have the debuginfo repository defined. For CentOS 5, put the following in /etc/yum.repos.d/CentOS-Base-debuginfo.repo:
[base-debuginfo] name=CentOS-$releasever - DebugInfo baseurl=http://debuginfo.centos.org/$releasever/$basearch/ gpgcheck=0
enabled=0
protect=1
priority=1

利用debuginfo-install安装glibc
debuginfo-install glibc

注意事项
安装debuginfo 去http://debuginfo.centos.org寻找和你内核完全匹配的rpm包。


详细:http://jingyan.baidu.com/article/37bce2be1839ca1003f3a253.html

————————————————————————————————————
自己实践如下:
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:kernel-debuginfo-common-x86_64-3.################################# [100%]

rpm -ihv   kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm  
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中...                          ################################# [100%]
        软件包 kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64 已经安装

再安装:
debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64
背景:多个文件时设置断点时,可以在断点后指定文件名加函数,也可指定文件名加行号,还可以断点后跟偏移量,摘录下其他网站的。
设置断点:

——————————————————————————————————————————————————————————
     (gdb) break 断点

     程序运行后,到达断点就会自动暂停运行。此时就可以查看该时刻的变量值,显示栈针,重新设置断点或者重新运行等。

     断点可以通过函数名,文件内的行号来设置,也可以先指定文件名再指定行号,还可以指定与暂停位置的偏移量,或者用地址来设置。

     (gdb) break 函数名

     (gdb) break 行号

     (gdb) break 文件名:行号

     (gdb) break 文件名:函数名

     (gdb) break +偏移量

     (gdb) break -偏移量

     (gdb) break *地址

     在设置断点的时候,如果不指定断点位置,就在下一行代码上设置断点。    


     条件断点

     (gdb) break 断点 if 条件

     仅在特定条件下中断。对于已存在的断点,可使用condition为其添加条件。

     (gdb) break 断点编号 条件

     而删除指定编号断点的触发条件同样使用condition。

     (gdb) condition 断点编号

阅读全文
每次在电脑上安装支付宝安全控件时,默认都会强行安装与运行TaobaoProtect这个进程(如图)。电脑上装了这个程序以后,在我玩游戏时它总是会令我正在运行的程序自动跳出,使游戏最小化到任务栏上。令我感觉特别烦人!特别受骚扰!可是在淘宝上购物不安装支付宝又不行。最可恶的是购物以后我将支付宝安全控件卸载了然而这个该死的TaobaoProtect进程依然存在。阿里旺旺怎么净干这磋事啊?谁有办法禁用这个该死的进程啊?

1)首先删除C:\Users\“用户名”\AppData\Roaming\TaobaoProtect下的TaobaoProtect.exe和TaobaoProtectSE.dll。然后新建一个txt文件,重命名为TaobaoProtect.exe,右键属性设置只读打勾。目前最完美的解决方案了。

2)如果删除不掉有程序在使用怎么办,unlock来解锁:
http://www.anxz.com/down/1600.html
Git分支模型及版本控制:
https://github.com/wmzhai/advanced-git-topic/blob/master/branching-model.md
extensions.firebug.console.logLimit 配置的。

Firebug's log limit has been reached. %S entries not shown. Firebug 的日志已达上限。 %S 条目没有显示。 建议: Firebug 的日志已达上限。
一)他怎么知道缓存在那个目录呢?
You can add a line in wp-config.php like below:
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache');

root@101.200.228.135:/data/htdocs/jackxiang.com# grep -r "RT_WP_NGINX_HELPER_CACHE_PATH" ./
./wp-content/plugins/nginx-helper/nginx-helper.php:        define('RT_WP_NGINX_HELPER_CACHE_PATH', '/var/run/nginx-cache');
./wp-content/plugins/nginx-helper/purger.php:                   if (!defined('RT_WP_NGINX_HELPER_CACHE_PATH')) {
./wp-content/plugins/nginx-helper/readme.txt:`define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/run/nginx-cache/');`

vim打开上面文件替换:
%s/\/var\/run\/nginx-cache/\/data\/cache\/ngx_fcgi_cache2/g
二)总配置:/conf/nginx.conf


三)分配置:/conf/vhost/jackxiang.conf 阅读全文
wget -c http://www.itkb.ro/userfiles/file/libiconv-glibc-2.16.patch.gz
cd libiconv-1.14/srclib
patch -p1 stdio.in.h
俺运行patch后好久都没有反应 :( 最后人肉修改
这个补丁的内容如上,用unzip包解压后rz上CentOS7上去,修改成下面这样:
/data/software/libiconv-1.14/srclib/stdio.in.h


参考来自:http://forum.z27315.com/topic/15662-%E8%A7%A3%E5%86%B3%E7%BC%96%E8%AF%91libiconv%E6%97%B6%E7%9A%84gets-undeclared-here%E9%94%99%E8%AF%AF/
背景:在centos7上安装hhvm包遇到这个Supervisor安装的问题,   hhvm速度很快,但由于与网站程序兼容性或hhvm本身不成熟,跑一段时间后会出现hhvm宕掉,使前台页面出现502 bad gateway。为了防止hhvm进程自动宕掉,我们可以用Supervisor来管理hhvm进程,它会在hhvm宕掉后自动启动hhvm进程。
Supervisor已经加到《lnmp一键安装包》,欢迎测试。
http://ju.outofmemory.cn/entry/236584
web 管理界面:
出于安全考虑,默认配置是没有开启web管理界面,需要修改supervisord.conf配置文件@/etc/supervisord.conf,打开http访权限:
[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001          ; (ip_address:port specifier, *:port for all iface)
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))
port:绑定访问IP和端口,这里是绑定的是本地IP和9001端口
username:登录管理后台的用户名




1.hhvm是不是不支持缩略图啊,我用hhvm就没缩略图,转换成php就有了,用timthumb.php生成缩略图(hhvm 好像 timthumb兼容性有问题):
环境是HHVM NGINX
timthumb有些图能截取,大部分都截取不了了。但是去掉 最后的&h=图片高度&w=图片宽度&zc=1 这个参数又能打开
解决办法:http://www.cmhello.com/timthumb.html

2.Hhvm配置memcached加速wordpress运行:
http://www.wordpressnote.com/hhvm-memcached-wordpress/

ps -ef | grep super supervisord 这个进程在吗?
service supervisord restart
现在hhvm交给supervisord管理了

HHVM相关教程请参考如下:
CentOS 7下hhvm Nginx环境搭建:http://blog.linuxeye.com/402.html
CentOS 6下hhvm Nginx环境搭建:http://blog.linuxeye.com/396.html

Supervisor简介
Supervisor是一个Python开发的client/server系统,可以管理和监控*nix上面的进程。

部件
Supervisor有不同的部件组成,部件分别负责不同的功能,对进程进行监控和管理。

supervisord
Supervisor的server部分称为supervisord。主要负责管理子进程,响应客户端的命令,log子进程的输出,创建和处理不同的事件

supervisorctl
Supervisor的命令行客户端。它可以与不同的supervisord进程进行通信,获取子进程信息,管理子进程

Web Server
Supervisor的web server,用户可以通过web对子进程进行监控,管理等等,作用与supervisorctl一致。

XML-RPC interface
XML-RPC接口,提供XML-RPC服务来对子进程进行管理,监控

安装Supervisor
安装supervisor很简单,通过easy_install就可以安装

yum -y install python-setuptools

easy_install supervisor
安装完成之后,就可以用echo_supervisord_conf命令来生成配置文件

echo_supervisord_conf > /etc/supervisord.conf
配置supervisor管理hhvm进程
vi /etc/supervisord.conf
pidfile=/tmp/supervisord.pid 改成
pidfile=/var/run/supervisord.pid
#并在/etc/supervisord.conf后面追加如下内容:


supervisor开机脚本

wget https://github.com/Supervisor/initscripts/raw/master/redhat-init-mingalevme
/bin/mv redhat-init-mingalevme /etc/init.d/supervisord
chmod +x /etc/init.d/supervisord
chkconfig supervisord on
service supervisord restart
测试Supervistor

摘自:http://blog.linuxeye.com/408.html
参考:http://www.cnblogs.com/yjf512/archive/2012/03/05/2380496.html

本站参考:http://jackxiang.com/post/7693/
监控php的守护进程(没实践), 可以开多个,并同时监控:
关于Worker守护进程的启动和监控
上面例子中直接启动worker脚本作为守护进程,无法监控到worker进程是否存活.
使用Unix进程监控supervisord则可轻松解决这个问题.
将如下配置添加到supervisord的配置中,即可实现由supervisord来启动和监控myworker.
背景:开发web程序来讲,凡是用户输入都不可信的原则,加强web应用的安全性培训笔记,主要是有这个安全的意识至关重要,形成梯队、纵深、层层防御体系至关重要。

1=1注入,主要是输入过滤:
数字型:?ID=120 and 1=1
字符型:单引号保障其完整性,闭合,形成完整查询。
搜索型:模糊搜索,like,test=adb%abc%。

信息泄漏
拖库
执行恶意代码获取administrator。
如何杜绝sql inject:参数化,检测非法字符,安全api。

身份认证,会话管理(放服务器验证别放前台)。
提升用户不存在,密码错误(弱密码)。撞库。
验证码饶过:网站回退,验证码名称和图片名一致;把验证码放session验证。

xss攻击:网站用户。输入js代码盗取cookie。javascript 尖括号过滤。跨站脚本主要是对用户的攻击,对服务器没有用。

越权漏洞:我可以修改你的资料。
春秋航空,update?id=xxx xxx变yyy。
垂直越权:访问更高级别的用户权限。
test 访问到了管理界面,发现按钮是灰色,F12 直接修改去disable,可点击,后没添加按钮,div disable=none,打开后就可以修改了(输入必填项),成功后再次登录,成功越权。

不安全的直接对象引用(xia z):
任意文件引用~下载路径:.. 上一路径。
查看到系统的路径,网站源码。修复:只让输入.xml的,下源码%00终结符号:password=a.php%00download.xml
Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码
影响版本:
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37

而新漏洞的利用方式是:
/test.jpg%00.php
对应fastcgi_script_name的匹配正则,我们会发现是匹不到这个漏洞的,所以非常杯具,以前被老nginx漏洞黑过的肉鸡还能被重新黑一次。
一般这个漏洞需要在能够上传文件的应用中才能被利用,所以论坛首当其冲,象discuz论坛的两个文件就能非常方便的识别这个漏洞。
解决方法:升级Nginx
摘录自:http://www.unhonker.com/bug/153.html
——————————————————————————————————————————————————————————————————
重定向漏洞:
redirect 检验refer。

上传漏洞:
只前台校验后缀。
可以用工具干掉那块校验的js,截包工具,fiddler2,再查查。传shell啥的,控制主机。

未验证的访问重定向:
?url=http://api.开放平台网址.cn/gettoken?code=xxxx  对跳转地址输入处(浏览器参数)做验证(用户填写的申请的网站回调获取code的url地址),其它地址不让他跳转。
背景:今天一链接测试机,执行ls时出现:Input/output error,-bash: /bin/df: Input/output error,-bash: /usr/bin/uptime: Input/output error......

   今天在linux下执行umount时无意用了远程目录而不是本地目录,结果悲剧了,当前用户出错,直接进入bash,不管输入什么命令都提示:input/output error。-bash: /home/myhome/.bash_profile: Input/output error
-bash-3.2$


用root账户进去,发现自己的目录变成这样:
d?????????  ? ?           ?              ?                ? myhome


在网上一搜都说可能是硬盘错误,一身汗~~


最后想起之前umount命令好像有问题,在root下重新执行:
# umount /home/myhome
unmount error 16 = Device or resource busy
Refer to the umount.cifs(8) manual page (man 8 umount.cifs)
unmount error 16 = Device or resource busy
Refer to the umount.cifs(8) manual page (man 8 umount.cifs)





以前也经常出现" Device or resource busy"这种问题,到网上再搜,查到一段话:




“有些时候,可能某些设备(通常是 CD-ROM)正忙或无法响应。此时,大多数用户的解决办法是重新启动计算机。我们大可不必这么做。例如,如果 umount /dev/hdc 失败的话,您可以试试“lazy” umount。语法十分简单:
umount -l <挂载点|设备>
此命令将会断开设备并关闭打开该设备的全部句柄。通常,您可以使用 eject <挂载点|设备>命令弹出碟片。所以,如果 eject 命令失效而您又不想重新启动,请使用 lazy umount。”


再次执行后搞定,谢天谢地!!记下以备忘!

转:http://bbs.c114.net/thread-564376-1-1.html
背景:生成唯一编码的uuid值,标识一个资源是很有必要的。
1.执行uuidgen命令,可以生成一个uuid数

2.sudo apt-get install uuid-dev,调用uuid_generate函数

来自:http://blog.csdn.net/sruru/article/details/8137871


Linux & Windows上生成UUID/GUID:
http://blog.csdn.net/ghlfllz/article/details/17128393
背景:有时像硬件测试,比如SIM900a,如果你有一台公网ip服务器,想开一个tcp上的ip端口,在Windows下有tcp/ip的调试助手的界面软件,而linux下没有这样的玩意,怎么办呢?shell有这个功能,好像nc也有类似的模拟client去连接服务器的功能,咱就先找个shell的,Linux 下有兄弟好像写了一个debian下的的deb包:http://blog.chinaunix.net/uid-21977056-id-4310527.html 如下。
bash socket 编程 :
在bash环境中,你可以打开一个socket,并通过它发送数据. 并不需要安装curl或者lynx等程序.

通过两个特殊的设备文件, 可以打开网络socket

/dev/tcp/host/port

如果 host是一个有效的主机名或者IP地址, 端口号是一个整数或者常见的服务名(如dns, http), 那么bash将打开一个TCP连接
/dev/udp/host/port

打开到host:port的UDP连接

(echo >/dev/tcp/localhost/80) &>/dev/null && echo “TCP port 80 open” || echo “TCP port 80 close”
/dev/[tcp|upd]/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口。如果主机以及端口存在,就建立一个socket 连接。将在,/proc/self/fd目录下面,有对应的文件出现。
用来判断本机的80端口是否打开

另外, 一段crontab脚本

!/bin/bash
exec 8<>/dev/tcp/zhiwei.li/80

if [ $? -eq 0 ] ; then

    printf "GET /status HTTP/1.0rn" >&8
    printf "Host: zhiwei.lirn" >&8
    printf "User-Agent: Mozilla/5.0rn" >&8
    printf "rn" >&8

    while read -u 8 -r -t 2 block;
    do
            echo $block
            echo "$(date) - web server is running."
            while read -u 8 line ;
            do
                    echo $line
            done
            exec 8&-
            exit
    done
fi

echo “need reboot”
….
来自:http://my.oschina.net/panzhc/blog/182843#OSC_h1_1
参考资料:
http://xpt.sourceforge.net/techdocs/nix/shell/gsh05-ShBash/ar01s28.html
http://www.cyberciti.biz/tips/spice-up-your-unix-linux-shell-scripts.html
————————————————————————————————————————————
一)如果出于效率的话还是选择工具的好shell不怎么合适做这个^_^,但作测试足够了:
直接在交互shell下
exec 3</dev/tcp/localhost/80
exec 3</dev/tcp/localhost/25
lsof -p $$
我开了httpd和sendmail服务,因此80和25端口有响应。
可以看到当前shell只打开了25这个端口。

二)如何查看这个shell是否真正打开了这个80端口?
一、安装nmap
yum install nmap #输入y安装
二、使用nmap
nmap localhost #查看主机当前开放的端口
nmap -p 1024-65535 localhost#查看主机端口(1024-65535)中开放的端口
nmap -PS 192.168.21.163 #探测目标主机开放的端口
nmap -PS22,80,3306 192.168.21.163 #探测所列出的目标主机端口
nmap -O 192.168.21.163 #探测目标主机操作系统类型
nmap -A 192.168.21.163 #探测目标主机操作系统类型
nmap --help #更多nmap参数请查询帮助信息
三、关闭或者打开主机端口
1、nmap localhost #查看主机当前开放端口
2、ntsysv #打开系统服务器管理器(需要先安装yum install ntsysv),选择要关闭或者打开的服务
摘自:http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0819/8442.html
nmap localhost  

Starting Nmap 5.51 ( http://nmap.org ) at 2015-04-26 18:07 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 992 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
111/tcp  open  rpcbind
443/tcp  open  https
5901/tcp open  vnc-1
6001/tcp open  X11:1
8080/tcp open  http-proxy

三)测试:用telnet就行了。
——————————————————————————————————————————————————————————
http://www.csdn.net/article/2012-02-28/312483
时间 2014-03-17 22:04:04  向东博客
原文  http://jackxiang.com/post/7098/
阅读全文
背景:多进程有set follow-fork-mode=child,多线程怎么办呢?尤其是有那个时钟啥的,共享变量,这儿提供了一方法,我也没看懂,先放这儿。应该是gdb新的版本有这个功能。
阅读全文
http://66889922.blog.51cto.com/9959194/1636194
背景:之前大学学习过c语言,后来上班后学习并以php工作了几年,近来对纯c语言感兴趣,于是学习并试着用c语言编写并编译一个简单的内存指针池小程序发现有warning,multipepollserver.cpp:648: warning: deprecated conversion from string constant to ‘char*’,于是查了下是这样解决的,作一下学习并备案。
原来是:
void saveUpedFilePartInfo2Mem(upFilePart* filePart,const char* guid,unsigned int partIndex,char* httpHeader,char* httpBody,unsigned int httpBodyLen,char* uploadTime)
修改为:
void saveUpedFilePartInfo2Mem(upFilePart* filePart,const char* guid,unsigned int partIndex,const char* httpHeader,const char* httpBody,unsigned int httpBodyLen,const char* uploadTime);//存一个分片>信息到内存池里去                                                                                                                                                                      
阅读全文
背景:有人在群里问,打扰下,请教一个问题,mac下设置svn关键词自动替换,为啥不生效那?配置如下:


哪位大神遇到类似问题,麻烦指点下
A:
修改的svn配置文件为:~/.subversion/config

____________________________________

在SVN中实现$Id$的自动替换

一直知道SVN有个叫Id关键字可以自动替换成$Id: common.php 34 2012-04-01 08:35:01Z yubing $ 这样的形式.

操作步骤如下:
     修改svn的config, 但这个不同的操作系统,放置的位置不一样

    C:\Documents and Settings\{Windows 用户名}\Application Data\Subversion\config (WindosXP)
    C:\Users\{Windows 用户名}\AppData\Roaming\Subversion\config (Windows7)
    ~/.subversion/config (*uix)

去掉config文件,中的下面一行注释
   enable-auto-props = yes

然后再加上下面这行就好了
  *.php = svn:keywords=Id
  *.js = svn:keywords=Id

以后包含在SVN里的文件,都会自动加上svn:keywords Id这个属性了.


以前已经提交到svn的文件, 自动添加该属性需要执行下面的操作
  svn propset svn:keywords Id <filename>

摘自:http://blog.sina.com.cn/s/blog_467eb8ca01011vtx.html
了解一下:
Url:http://blog.csdn.net/zhangxinrun/article/details/6721495


______________golang中tcp socket粘包问题和处理_______________
粘包产生原因
关于粘包的产生原因网上有很多相关的说明,主要原因就是tcp数据传递模式是流模式,在保持长连接的时候可以进行多次的收和发。如果要深入了解可以看看tcp协议方面的内容。这里推荐下鸟哥的私房菜,讲的非常通俗易懂。
粘包解决办法
主要有两种方法:
1、客户端发送一次就断开连接,需要发送数据的时候再次连接,典型如http。下面用golang演示一下这个过程,确实不会出现粘包问题。
2、包头+数据的格式,根据包头信息读取到需要分析的数据。

http://www.01happy.com/golang-tcp-socket-adhere/
背景:C语言不如PHP语言在字符串处理上有较大的灵活性,如取一个字符串的前N个可以有strncpy,但是如果想取从第N位的后M个字符怎么办?得自己写。
其实有strstr结合memncpy来做这个事情,c指针字符串指针查到某个串后指向哪儿并找到一个位置后,如何拷贝此时指针位置前面的字符串,链接在:http://jackxiang.com/post/7933/

你上传的文件是二进制的,而strstr是字符串处理函数,遇到\0就不会往后继续查找了。strlen也是字符串处理函数。这种情况,拷贝使用memcpy,程序记住拷贝的len,查找需要自己用指针移动实现。
昨天不是说过了么,二进制数据不能使用字符串处理函数
罗毅峰拷贝一个上传具有二进制的包体的相关字符串不用用的拷贝方法:


recvlen就是总长度吧,p = strstr(szTmpBuf,headerSepFlag);//p指向这个\r\n\r\n 的这儿:
后,用p-szTmpBuf 也就是这个http的header长度。
再用recvLen 就是总长度,recvLen-(p-szTmpBuf) 这就是body的长度,
后再用: memcpy(httpBody,p+4,recvLen-(p-szTmpBuf));  就能拷贝进去?
罗毅峰新  10:49:45
yes
szTmpBuf也是指针,指针减指针,得到的是距离长度。szTmpBuf和p都是char *类型
——————————————————————————————————


[root@iZ25dcp92ckZ multepoolserver]# gcc strstr.c  -o strstr
[root@iZ25dcp92ckZ multepoolserver]# ./strstr
p=lobal View
content = bal View

————————————————————————————————————————————————————————————————



[root@iZ25dcp92ckZ multepoolserver]# ./strstr
httpHeader=Golden G
p=lobal View
content = bal View

——————————————————————————————————————————————————————————————

这里学习到获得字符串标识位后面的几位:
加密日志
这篇日志被加密了。请输入密码后查看。
密码
背景:memcache线上环境出现端口还在,但是执行命令就一直柱塞的情况,怎么办?只有打开日志了。运维觉得是:像是进程死了,技术觉得是读写多了,无证据只能是大胆的猜测,得找证据,从下次崩溃的日志里找,呵呵。
memcache在linux上安装时并不支持显示地配置服务日志,我们如果想要把memcache服务日志保存到日志文件中,则需要在启动参数中进行配置。
安装好memcache后,我们可以通过-h命令查看memcached支持的参数:
/usr/local/bin/memcached -h
-v            verbose (print errors/warnings while in event loop)
-vv           very verbose (also print client commands/reponses)

建议在启动memcached时加上日志,
出问题时候从日志上找到蛛丝马迹,
出问题后立即ps看其进程处啥状态:
-vv >> /tmp/memcached.log 2>&1  


加个日志吧,日志注意下到时间清理下:
/usr/local/bin/memcached -d -m 5120  -u root -l  10.70.62.*** -p 11211 -c 2048 -u root -vv >> /tmp/memcached.log 2>&1  
-v            verbose (print errors/warnings while in event loop)
-vv           very verbose (also print client commands/reponses)

从上面可以看到,启动memcached时有3个参数是和日志信息相关的:
其中-v代表打印普通的错误或者警告类型的日志信息
-vv比-v打印的日志更详细,包含了客户端命令和server端的响应信息
-vvv则是最详尽的,甚至包含了内部的状态信息打印

你可以根据你的实际需要来选择对应的参数,我这里使用-vv就OK了。
由于我们需要把日志信息保存在文件中,而不是在控制台输出,而-vv等参数只能把日志信息输出在控制台。所以我们需要对-vv参数的输出进行数据流重定向,关于重定向的知识在这里就不细述了,有兴趣的可以查下资料了解一下。
综上,启动memcached的命令如下:

Shell代码  收藏代码
/usr/local/memcached/bin/memcached -d -m 2048 -p $1 -u root -vv >> /tmp/memcached.log 2>&1  
重点在最后的:-vv >> /tmp/memcached.log 2>&1

-vv >> /tmp/memcached.log:代表把-vv的输出重定向到/tmp/memcached.log 文件中
2>&1的意思是把错误日志也一起写入到该文件中

启动成功后我们可以测试一下,首先起两个terminal,terminal1用来查看日志信息,terminal2进行client操作
terminal1:启动memcached后默认的日志信息如下
Shell代码  收藏代码
[chenzhou@localhost ~]$ tail -f /tmp/memcached.log  
<31 send buffer was 110592, now 268435456  
<30 server listening (udp)  
<31 server listening (udp)  
<30 server listening (udp)  
<31 server listening (udp)  
<30 server listening (udp)  
<30 server listening (udp)  
<31 server listening (udp)  
<31 server listening (udp)  
<32 new auto-negotiating client connection  
terminal2:往memcached里存入一个数据
Shell代码  收藏代码
[root@localhost bin]# telnet localhost 11211  
Trying 127.0.0.1...  
Connected to localhost.localdomain (127.0.0.1).  
Escape character is '^]'.  
set name 0 60 5 chenzhou  
如上所示:使用set命令存入key为name value为chenzhou
terminal1日志记录:
Shell代码  收藏代码
32: Client using the ascii protocol  
<32 set name 0 60 5 chenzhou  
这样,我们的配置就生效了。

摘自:http://chenzhou123520.iteye.com/blog/1925209
背景:有人对vim+ctag有意见,于是有人就说这个玩意好了。

YouCompleteMe的特别之处
基于语义补全

  总所周知,Vim是一款文本编辑器。也就是说,其最基础的工作就是编辑文本,而不管该文本的内容是什么。在Vim被程序员所使用后,其慢慢的被肩负了与IDE一样的工作,文本自动补全(ie.acp,omnicppcompleter),代码检查(Syntastic)等等工作。

  针对文本自动补全这个功能来说,主要有两种实现方式。

    基于文本

  我们常用的omnicppcompleter,acp,vim自带的c-x, c-n的实现方式就是基于文本。更通俗的说法,其实就是一个字:


  其通过文本进行一些正则表达式的匹配,再根据生成的tags(利用ctags生成)来实现自动补全的效果。

    基于语义

  顾名思义,其是通过分析源文件,经过语法分析以后进行补全。由于对源文件进行分析,基于语义的补全可以做到很精确。但是这显然是vim所不可能支持的。而且经过这么多年发展,由于语法分析有很高的难度,也一直没有合适的工具出现。直到,由apple支持的clang/llvm横空出世。YouCompleteMe也正是在clang/llvm的基础上进行构建的。
整合实现了多种插件

    clang_complete
    AutoComplPop
    Supertab
    neocomplcache
    Syntastic(类似功能,仅仅针对c/c++/obj-c代码)

支持语言

    c
    c++
    obj-c
    c#
    python

  对于其他的语言,会调用vim设置的omnifunc来匹配,因此同样支持php,ruby等语言。

http://jishu.zol.com.cn/228882.html
分页: 13/24 第一页 上页 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 下页 最后页 [ 显示模式: 摘要 | 列表 ]