摘要: Web Components 是什么? Web Components是W3C定义的新标准,它给了前端开发者扩展浏览器标签的能力,可以自由的定制组件,更好的进行模块化开发,彻底解放了前端开发者的生产力。 Web Components 架构 Web Components在 W3C 规范中的发展有几个模块 阅读全文
posted @ 2016-05-12 17:24 linzj 阅读(2178) 评论(0) 推荐(0) 编辑
摘要: 基本概念 信号在Linux中是一个比较常见的概念,例如我们按Ctrl+C中断前台进程,通过Kill命令结束进程都是通过信号实现的。下面就以Ctrl+C为例简单的说明信号的处理流程: 用户按下Ctrl-C,这个键盘输入产生一个硬件中断。 该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断。 终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发... 阅读全文
posted @ 2016-05-12 14:56 linzj 阅读(2474) 评论(0) 推荐(0) 编辑
摘要: Linux下的Socket编程大体上包括Tcp Socket、Udp Socket即Raw Socket这三种,其中TCP和UDP方式的Socket编程用于编写应用层的socket程序,是我们用得比较多的,而Raw Socket则用得相对较少,不在本文介绍范围之列。 TCP Socket 基于TCP协议的客户端/服务器程序的一般流程一般如下: 它基本上可以分为三个部分: 一、建立连接:... 阅读全文
posted @ 2016-05-12 14:55 linzj 阅读(823) 评论(0) 推荐(0) 编辑
摘要: 多个线程同时访问共享数据时可能会冲突,比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 从内存读变量值到寄存器 寄存器的值加1 将寄存器的值写回内存 假设两个线程在多处理器平台上同时执行这三条指令,则可能导致下图所示的结果,最后变量只加了一次而非两次。 如下例子就演示了这一过程: #include #include #include int count... 阅读全文
posted @ 2016-05-12 14:54 linzj 阅读(393) 评论(0) 推荐(1) 编辑
摘要: 线程 有的时候,我们需要在一个基础中同时运行多个控制流程。例如:一个图形界面的下载软件,在处理下载任务的同时,还必须响应界面的对任务的停止,删除等控制操作。这个时候就需要用到线程来实现并发操作。 和信号处理函数的控制在处理完信号之后就结束不同的是,多线程的控制流程可以长期并存,操作系统会在各线程之间调度和切换,就像在多个进程之间调度和切换一样,但创建线程开销要比进程小得多。因此,线程往往也被称... 阅读全文
posted @ 2016-05-12 14:53 linzj 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 每个进程各自有不同的用户地址空间,进程之间要交换数据必须通过在内核中开辟缓冲区,从而实现数据共享。 管道 管道是一种最基本的IPC机制,由pipe函数创建: int pipe(int filedes[2]); 调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过filedes参数传出给用户程序两个文件描述符,filedes[0]指向管道的读... 阅读全文
posted @ 2016-05-12 14:48 linzj 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 进程控制块 在Linux中,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,它通常包含如下信息: 进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。 进程的状态,有运行、挂起、停止、僵尸等状态。 进程切换时需要保存和恢复的一些CPU寄存器。 描述虚拟地址空间的信息。 描述控制终端的信息。 当前工作目录(Current Working... 阅读全文
posted @ 2016-05-12 14:44 linzj 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 缓冲I/O和非缓冲I/O 文件读写主要牵涉到了如下五个操作:打开、关闭、读、写、定位。在Linux系统中,提供了两套API, 一套是C标准API:fopen、fclose、fread、fwrite、fseek, 另一套则是POSIX定义的系统API:open、close、read、write、seek。 其中POSIX定义的API是系统API,而C标准API是基于系统API的封装,并且提... 阅读全文
posted @ 2016-05-12 14:43 linzj 阅读(596) 评论(0) 推荐(0) 编辑
摘要: 查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。 下面是一些查看函数调用栈信息的GDB命令: backtrace / bt :打印当前的函数调用栈的所有信息。如: (gdb) bt #0 func (n=250) at t... 阅读全文
posted @ 2016-05-12 14:42 linzj 阅读(693) 评论(0) 推荐(0) 编辑
摘要: 调试已运行的程序 在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb PID格式挂接正在运行的程序。 先用gdb 关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程的PID。并用detach来取消挂接的进程。 暂停 / 恢复程序运行 调试程序中,暂停程序运行是必须的,GDB可以方便地暂停程序的运行。你可以设置程序的在哪行停住,在什么条件下停住,在收到... 阅读全文
posted @ 2016-05-12 14:35 linzj 阅读(977) 评论(0) 推荐(0) 编辑
摘要: GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的运... 阅读全文
posted @ 2016-05-12 14:34 linzj 阅读(264) 评论(0) 推荐(1) 编辑
摘要: Makefile语法基础 在Linux下,自动化编译工具是通过make命令来完成的(一些工具厂商也提供了它们自己的make命令,如gmake等),make命令的基本格式如下: make [-f makefile] [label] 它可以通过-f参数指定输入文件,当省略-f参数时,默认输入文件名为Makefile,由于我们通常不用这个-f参数,往往就用默认的Makefile文件名。 Mak... 阅读全文
posted @ 2016-05-12 14:27 linzj 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 在Linux环境下,我们通常用gcc将C代码编译成可执行文件,如下就是一个简单的例子: 小实验:hello.c #include #include void main(void) { printf("hello world!\r\n"); } 可以通过如下指令来编译出一个可执行文件: gcc hello.c 执行完该命令后,就会得到一个a.out的可执行文件。 编译的过... 阅读全文
posted @ 2016-05-12 14:26 linzj 阅读(658) 评论(0) 推荐(0) 编辑
摘要: VI是Linux/Unix下标配的一个纯字符界面的文本编辑器。由于不支持鼠标功能,也没有图形界面,相关的操作都要通过键盘指令来完成,需要记忆大量命令。因此很多人不大喜欢它,但同时由于键盘的方式往往比鼠标来得快,一旦熟练后用起来是有种非常流畅的感觉的,也有人因此而非常喜欢它。 不管你喜欢也好,不喜欢也好,VI是Linux的标配编辑器,很多时候你也只有这一个编辑器可用,如果要做一个Linux Cod... 阅读全文
posted @ 2016-05-12 14:21 linzj 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 背景 也许最常见的PHP扩展是那些包裹第三方C库的扩展。这些扩展包括MySQL或Oracle的数据库服务库,libxml2的 XML技术库,ImageMagick 或GD的图形操纵库。 在本节中,我们编写一个扩展,同样使用脚本来生成骨架扩展,因为这能节省许多工作量。这个扩展包裹了标准C函数fopen(), fclose(), fread(), fwrite()和 feof(). 环境搭建 ... 阅读全文
posted @ 2016-05-12 14:18 linzj 阅读(1552) 评论(0) 推荐(1) 编辑
摘要: 为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数百倍。 另外C扩展是在进程启动时加载的,PHP代码只能操作Request生命周期的数据,C扩展可操作的范围更广。 创建扩展骨架 ##本例用的php版本的是5.3.3 cd php-5.3.3/ext/ ./ext_skel --extname=myfun --proto=myf... 阅读全文
posted @ 2016-05-12 14:17 linzj 阅读(4371) 评论(0) 推荐(0) 编辑
摘要: 简介 Taint 可以用来检测隐藏的XSS code, SQL注入, Shell注入等漏洞, 并且这些漏洞如果要用静态分析工具去排查, 将会非常困难, 比如对于如下的例子: 对于请求: http://localhost/?name=222 静态分析工具, 往往无能为力, 而Taint却可以准确无误的爆出这类型问题. Warning: Main::test() [function.... 阅读全文
posted @ 2016-05-12 14:08 linzj 阅读(2627) 评论(0) 推荐(0) 编辑
摘要: 简介 Optimizer+ 是 Zend 开发的闭源但可以免费使用的 PHP 优化加速组件,是第一个也是最快的 opcode 缓存工具。现在,Zend 科技公司将 Optimizer+ 在 PHP License 下开源成为 Zend Opcache。 Zend OPcache 通过 opcode 阅读全文
posted @ 2016-05-12 14:08 linzj 阅读(3390) 评论(0) 推荐(1) 编辑
摘要: vld安装 配置php.ini 运行结果 来自为知笔记(Wiz) 阅读全文
posted @ 2016-05-12 14:07 linzj 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 简介 XHProf 是一个轻量级的分层性能测量分析器。 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。 它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。 函数性能报告可以由调用者和被调用者终止。 在数据搜集阶段 XHProf 通过调用图的循环来检测递归函数,通过赋予唯一的深度名称来避免递归调用的循环。 XHProf 包含了一个基... 阅读全文
posted @ 2016-05-12 14:07 linzj 阅读(416) 评论(0) 推荐(0) 编辑