- 浏览: 110484 次
- 性别:
- 来自: 上海
最新评论
-
loweets:
你好,请问你的代码下到了没,现在链接失效了,我想要一份,谢谢
[MT6225]0840源代码SVN下载
文章列表
PHP API封装的一个实例,来自EtherPad
- 博客分类:
- php
<?php
class EtherpadLiteClient {
const API_VERSION = 1;
const CODE_OK = 0;
const CODE_INVALID_PARAMETERS = 1;
const CODE_INTERNAL_ERROR = 2;
const CODE_INVALID_FUNCTION = 3;
const CODE_INVALID_API_KEY = 4;
protected $apiKey = "& ...
使用php模拟http请求
- 博客分类:
- php
// Returns array with headers in $response[0] and body in $response[1]
function http_post($request, $host, $path, $port = 80, $ip=null) {
$http_request = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $host\r\n";
$http_request .= 'Content-Type: application/x-www- ...
要理解fork(),首先需要懂得c程序和进程的概念:
c程序组成部分如下:
Text segment,正文段,由CPU执行的及其指令部分,可共享,通常是只读.
Initialized data segment, 初始化数据段,包含程序中需要明确赋初值的变量.
Uninitialized data segment, 非初 ...
最近有朋友在面试的时候被问了select 和epoll效率差的原因,和一般人一样,大部分都会回答select是轮询、epoll是触发式的,所以效率高。这个答案听上去很完美,大致也说出了二者的主要区别。
今天闲来无事,翻看了下内核代码,结合内核代码和大家分享下我的观点。
一、连接数
我本人也曾经在项目中用过select和epoll,对于select,感触最深的是linux下select最大数目限制(windows 下似乎没有限制),每个进程的select最多能处理FD_SETSIZE个FD(文件句柄),
如果要处理超过1024个句柄,只能采用多进程了。
常见的使用slect的多进程模型是这样的: ...
因为需要了解底层设备访问的原理,所以惯用高层应用语言的我,需要了解一下Linux的设备访问机制,尤其是处理一组非阻塞IO的原理方法,标准的术语好像是叫多路复用。以下文章部分句子有引用之处,恕没有一一指出出处。
...
建立TCP连接就好比一个电话系统[Nemeth 1997]。
socket函数等同于有电话可用。
bind函数是在告诉别人你的电话号码,这样他们可以呼叫你。
listen函数是打开电话振铃,这样当有一个外来呼叫到达时,你就可以听到。
connect函数要求我们知道对方的电话号码并拨打它。
accept函数发生在被呼叫的人应答电话之时。由accept返回客户的标识(即客户的IP地址和端口号)类似于让电话机的呼叫者ID功能部件显示呼叫者的电话号码。然而两者的不同之处在于accept只在连接建立之后返回客户的标识,而呼叫者ID功能部件却在我们选择应答或不应答电话之前显示呼叫者的电话号码。如果 ...
一、文本文件与二进制文件的定义
大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。
简单来说,文本文件是基于字符编码的文 ...
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
4.应尽量避免在 where 子句中使用 or 来连接条 ...
从各种文章来源来看,我理解的Facebook架构如下
1:web前端用PHP来写的。再用Facebook的HipHop转换成C++代码,使用g++编译。提供了一个高性能的模板系统和web逻辑执行层。
2:业务逻辑使用Thrift做成服务。一些服务根据不同情况使用php,c++,java来实现。也有可能使用其他语言。
3:用java写的服务没有使用一些企业级的框架服务。
4:持久化使用MYSQL,Memcached,Facebook自己的Cassandra.Hadoop的HBase。Memcached用来作为MySql的缓存。Facebook的工程师承认他们在减少Cassandra的使用,因 ...
处理器是文件,硬盘是文件,键盘是文件,鼠标是文件,电池也是文件。USB是文件,显示器是文件。对于linux kernel来说,所有硬件都被看做文件。你可以对他们进行读和写。
这些硬件可以在/dev目录下找到虚拟文件。他们的状态被保存在/proc目录下。
查看cpu
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping ...
1.将标准输出重定向到log.txt文件中。
命令举例:
tree > log.txt #将当前的目录结构写入文件(此方式会覆盖原log.txt的内容,如果此文件不存在,则自动创建)
tree >> log.txt #将当前的目录结构追加到文件结尾(此方式会将信息追加到log.txt的结尾,不会覆盖原文件的内容,如果此文件不存在,则自动创建)
2.将标准输出和错误输出都重定向到log.txt文件中。
将错误输出重定向到句柄1标准输出,即命令执行过程中产生的标准输出和错误输出都被重定向到log.txt文件中。
注:若无错误信息输出,则此方法在通常情况下与1的结果相同,因此多用于 ...
函数指针
首先要理解以下三个问题:
(1)C 语言中函数名直接对应于函数生成的指令代码在内存中的地址,因此函数名可以直接赋给指向函数的指针;
(2)调用函数实际上等同于"调转指令+参数传递处理+回归位置入栈",本质上最核心的操作是将函数生成的目标代
码的首地址赋给CPU 的PC 寄存器;
(3)因为函数调用的本质是跳转到某一个地址单元的code 去执行,所以可以"调用"一个根本就不存在的函数实体,
晕?请往下看:
请拿出你可以获得的任何一本大学《微型计算机原理》教材,书中讲到,186 CPU 启动后跳转至绝对地址0xFFFF0(对
应C 语言指针是0 ...
本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式)。首先是对 ...
ELF Section Header的结构还是要从/usr/include/elf.h中看。
typedef struct
{
Elf32_Word sh_name; /* Section name (string tbl index) */
Elf32_Word sh_type; /* Section type */
Elf32_Word sh_flags; /* Section flags */
Elf32_Addr sh_addr; /* Section virtual addr at execution */
Elf32_Off sh_offset; / ...
目标文件中的内容至少有编译后的机器指令代码、数据。
除了这些内容以外,目标文件中还包括了链接时所须要的一些信息,比如符号表、调试信息、字符串等。一般目标文件将这些信息按不同的属性,以"节"(Section)的形式存储,有时候也叫"段"(Segment),在一般情况下,它们都表示一个一定长度的区域,基本上不加以区别,唯一的区别是在ELF的链接视图和装载视图的时候。
程序源代码编译后的机器指令经常被放在代码段(Code Section)里,代码段常见的名字有".code"或".text";全局变量和局部静态变量数据经常放 ...