October 27, 2010
c语言中的scanf语法
"scanf函数,与 printf 函数一样,都被定义在 stdio.h 里,因此在使用scanf函数时要加上#include。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。\nscanf函数的一般形式 scanf(格式控制,地址表列)\nint scanf(char *format[,argument,…]);\n“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。\nscanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。\n例:使用scanf函数输入数据。\n在visual c++ 6.0上的编写方式。\n#include\nvoid main()\n{\nint a,b,c;\nprintf(“please input a,b,c”);\nscanf(“%d,%d,%d”,\u0026amp;a,\u0026amp;b,\u0026amp;c);\nprintf(“a=%d,b=%d,c=%d”,a,b,c);\n}\n在Dev-C++上运行程序为:\n#include\nint …"
October 26, 2010
Centos5下配置 lvs DR
"系统环境如下:\nserver1:192.168.1.206 vip server centos5 server2:192.168.1.210 apache centos5 server3:192.168.1.211 apache centos5\nvip:192.168.1.208 port:80\n============================================\n下面的安装是在vip server上进行的\n1、查看自己的操作系统的内核 #uname -a\n2、这个内核已经包括了ipvs的补丁,进行如下的操作就可以\n3、下面建立一个指向,为了保证ipvsadm安装\nmodprobe ip_vs\ncat /proc/net/ip_vs\n出现如下的提示\nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags\n– \u0026gt; RemoteAddress:Port Forward Weight ActiveConn InActConn\n4、安装ipvsadm …"
October 26, 2010
linux route 命令
"懂得网络配置命令是一般技术人员必备的技术,经过一段时间的研究和学习,总结了一些常用的命令和示例以便日后查阅. 传统的在1–3点,ip高级路由命令在4–12点,两者部分可以通用,并达到同样的目的,但ip的功能更强大,可以实现更多的配置目的. 首先,先了解传统的网络配置命令: **1. 使用ifconfig命令配置并查看网络接口情况 ** 示例1: 配置eth0的IP,同时激活设备: # ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up 示例2: 配置eth0别名设备 eth0:1 的IP,并添加路由\n# ifconfig eth0:1 192.168.4.2 # route add –host 192.168.4.2 dev eth0:1 示例3:激活(禁用)设备 # ifconfig eth0:1 up(down) 示例4:查看所有(指定)网络接口配置 # ifconfig (eth0) 2. 使用route 命令配置路由表 示例1:添加到主机路由 # route add –host 192.168.4.2 dev eth0:1 # …"
October 26, 2010
CentOS升级内核及KVM安装
"由于CentOS 默认内核为2.6.18,故需要升级内核\n升级内核到2.6.27,很容易,但升级到2.6.28后的版本折腾了我很久\n升级到2.6.27\nwget tar zxvf linux-2.6.27.tar.gz -C /usr/src cd /usr/src/linux-2.6.27 make menuconfig make make modules_install cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.27-root (注意:目录i386是根据你的系统类型, 如果是64位系统, 那就很可能是x86_64) cp System.map /boot/System.map-2.6.27-root mkinitrd /boot/initrd-2.6.27-root.img 2.6.27\nvi /etc/grub.conf\ntitle CentOS (2.6.27) root (hd0,6) kernel /vmlinuz-2.6.27-root ro root=/dev/VolGroup00/LogVol00 rhgb quiet …"
October 25, 2010
Windows 下为PHP添加扩展模块初探
"说明:\n本人新手,虽然用过很长时间的php,也写过一些简单php程序,但是一直没有对php的扩展模块有过研究。最近因为开发需要,要给一些php应用扩展功能,虽然手边有以前开发好的C程序,用popen等运行之也可以使用,但是从效率、调用便捷性、代码完整性等方面考虑总是觉得popen方式有些不妥,因此萌生了写个扩展模块的念头。于是乎上网找资料,并且初步完成了一个最基本的php扩展模块的框架。在此特别感谢花总的友情支持。\nbtw: 本文所说的相关技术已经很陈旧了,实在不适合用“初探”这个词,但是于我个人而言,却又的确是初探,现总结出来,分享之。\n0、环境说明\n框架生成环境:\nFreeBSD 6.0-STABLE ( 用各版本 Linux 或者 cygwin 也可以,不过我手边只有 bsd,就用它了 )\nPHP-4.4.4 源码包 (php-4.4.4.tar.bz2 或 php-4.4.4.tar.gz)\n开发工具:\nVC++ 6.0 ( 我没有用 VS .Net,因为 VC++6.0 启动比较快些,而且只是写个DLL而已 )\n运行环境:\nWindows 2003\nPHP-4.4.4 …"
October 25, 2010
[教程]Linux下C语言对PHP扩展
"一,搭建php环境\n下载php 5.2.6 源码 并解压编译安装,搭建php环境\n二,创建扩展项目\n进入源码目录\ncd php5.2.6/ext/\n./ext_skel –extname=my_ext\n创建名字为my_ext的项目,最终会生成 my_ext.so\n三,更改配置和程序\n$ vi ext/my_ext/config.m4\n根据你自己的选择将\ndnl PHP_ARG_WITH(my_ext, for my_ext support,\ndnl Make sure that the comment is aligned:\ndnl [ –with-my_ext Include my_ext support])\n修改成\nPHP_ARG_WITH(my_ext, for my_ext support,\nMake sure that the comment is aligned:\n[ –with-my_ext Include my_ext support])\n或者将\ndnl PHP_ARG_ENABLE(my_ext, whether to enable my_ext support, …"
October 25, 2010
在Windows下写PHP的C扩展
"安装好如下软件:\nVC++ 6\nphp二进制环境\nCygwin.\nI. 下载php的源码包\n下载后php源码包解压后有个ext目录,这个目录就是负责开发扩展的目录,目录中有默认你扩展的所有源码。还有两个重要的文件:ext_skel , ext_skel_win32.php.\next_skel是创建扩展的shell,在windows上无法运行,所以就必须要有Cygwin。\nII. 建立php扩展骨架目录文件\n如果你的cygwin没有安装在c:\\cygwin,进入php源码包\\ext目录下,修改ext_skel_win32.php :\n$cygwin_path = ‘c:\\cygwin\\bin’;\n修改为你的cygwin目录\n$cygwin_path = ‘d:\\cygwin\\bin’;\n命令行方式进入ext目录然后运行:\nphp ext_skel_win32.php –extname=myhello\n(当然,为了保证上面的命令行能正常运行,首先你得确保你的php目录在系统的环境变量里)\n运行该命令后,有人发现下面的错误\nWarning: …"
October 25, 2010
指针 数字数组和字符数组首地址的输出
"#include #include\nint main() {\nchar *p;int *p1;\nint a[10]={1,2,3,4,5,6,7,8,9,0}; char str[]=”haohtmlcom”; p=str; p1=a;\nprintf( “%x” , p); /*输出的是地址*/ printf(“%s”,p); /*输出的是字符串haohtmlcom*/\nprintf(“%x”,p1); /*输出的是地址*/\nprintf(“%s”,p1); /*输出的是字符串,乱码*/\nsystem(“pause”);\n}\np,p1中存放的应为字符串,但在输出时还要兼顾前面的输出格式符的控制,如果是%s,则会将p的地址内的数据输出,而不再输出p本身的内容地址.\nprintf(“%c”, *p);//会输出字符串的第一个字母h\nprintf(“%d”, *p1);//会输出数组的第一个数字.\n所以 p,p1存放的都是地址,在用%c,%d时都能作为首地址输出第一个字母或数组元素,但是如果换用,%s,输出字符串,在一个地址空间内是不能存在字符串的,所以编译器会认为是连续空间内的字符串,所以 …"
October 22, 2010
nginx与lvs做负载均衡的比较
"lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。\n首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试。把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。\n下面来分析一下两者:\n一、lvs的优势:\n1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和cpu方面基本无消耗。\n2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。\n3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定 …"
October 20, 2010
linux 下的软件开发之GCC,GDB用法篇
"在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器。目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada等。\n开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段:\n========================================\n◆ 预处理(Pre-Processing)\n◆ 编译(Compiling)\n◆ 汇编(Assembling)\n◆ 链接(Linking)\n========================================\nLinux程序员可以根据自己 …"