代码改变世界

随笔档案-2011年08月

《Unix网络编程》学习笔记 第一,第二章

2011-08-26 01:13 by Aga.J, 1515 阅读, 收藏,
摘要: 第一章 简介第一章对Unix下的网络编程做了概要的介绍,使用了获取时间的实例来讲解网络编程中所需要使用到的函数和注意内容,并详细的解析了每个函数的功能及其使用。由于之前已经谈过简单TCP通信的实现,这里便不再赘述。TCP下的日期/时间 客户端TCP下的日期/时间 服务器第二章传输层:TCP和UDP一 协议介绍UDP不可靠,数据报,TCP可靠,字节流,面向连接,全双工,支持ACK、超时重传,需要保证消息独立性ICMP网际控制消息协议,处理路由器和主机间的错误和控制信息IGMP网络组管理协议ARP地址解析协议,将IPv4地址映射到硬件地址RARP逆地址解析BPFBSD分组过滤器,为进城提供访问数据 阅读全文

《深入理解Linux内核》学习笔记-第一章

2011-08-26 01:11 by Aga.J, 718 阅读, 收藏,
摘要: 第一章 绪论(1) 类Unix操作系统采用“进程/内核”的模式,每个进程都自以为它是系统中唯一的进程,可独占操作系统所提供的服务,只要进程发出系统调用,硬件就会把特权模式由用户态转变为内核态,然后进程开始执行一个内核过程,这个过程的执行被局限于一个非常小的内核范围内,一旦请求被满足,内核过程迫使返回用户态,进程执行下一条指令(2) Unix文件是以一列字节组成的信息载体,内核不解释文件内容(3) unix的每个进程都有一个当前的工作目录,它属于进程执行上下文,标志出进程所用的当前目录(4) Unix文件类型包括:普通文件,目录,符号链接,块设备文件,字符设备文件,管道,命名管道,套接字(5) 阅读全文

谈谈linux上的并发(网络资源总结)

2011-08-26 01:10 by Aga.J, 1418 阅读, 收藏,
摘要: “并发”一词可能会误导很多人,实际上在单核的机器上并发是通过分时运行来模拟的,称为Concurrency,而在多核的机器上才可实现真正的并发,称为Parallelism。下面逐步介绍Linux上的IO模型,从而解析并发策略:(一) 阻塞I/O模型:分析:使用recvfrom,执行系统调用函数,陷入到内核中,内核等待数据报到来,这个时候用户进程被阻塞,直到内核拿到数据报后,拷贝到用户空间的缓冲区上,并通知用户空间进程数据报拷贝完成,这种阻塞I/O模式不适合多用户请求的环境。(二) 非阻塞I/O模型:分析:和“阻塞IO模型”不一样,非阻塞IO模型会收到内核的无数据报消息,防止进程一直阻塞在上面,接 阅读全文

select,epoll,poll比较(网络资源总结)

2011-08-26 01:09 by Aga.J, 2464 阅读, 收藏,
摘要: select,poll,epoll简介selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1 单个进程可监视的fd数量被限制2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大3 对socket进行扫描时是线性扫描pollpoll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了 阅读全文

lighttpd高性能Web服务器源码分析?坑爹啊,原来是light httpd!-0 -

2011-08-10 16:40 by Aga.J, 20076 阅读, 收藏,
摘要: 最近刚打算学unix网络编程,所以做了点入门的准备后,就找了个轻量级的web服务器的源码来看,听网上介绍说lighttpd不错,所以我找了一下,把所谓的源码下了下来,研究了一下,最后发现哥玩的是light httpd(http://lhttpd.sourceforge.net/docs.html)不是lighttpd(http://www.lighttpd.net/),坑爹啊!!!尼玛怎么长那么像啊!! 所以下面说的全是light httpd的源码分析,要看lighttpd的同学就等我有空再贴文章吧。 (1)先看热闹 上 light httpd官方网址(http://lhttpd.sourc. 阅读全文

求Linux C++高手解答

2011-08-04 19:57 by Aga.J, 657 阅读, 收藏,
摘要: 问题如下,今天整天就耗在和它有关的地方上了……#include<stdio.h> #include<string.h> #include<errno.h> #include<unistd.h> #include<fcntl.h>void main() { char *buf="hello\n"; int len=strlen(buf); close(1); FILE* fd0=freopen("/dev/tty","w",stdout); write(1,buf,len+1) 阅读全文