摘要: 一、I/O模型首先,输入操作一般包含两个步骤:1、等待数据准备好(waiting for data to be ready)。对于一个套接口上的操作,这一步骤关系到数据从网络到达,并将其复制到内核的某个缓冲区。2、将数据从内核缓冲区复制到进程缓冲区(copying the data from the kernel to the process)。二、I/O模型类型其次了解一下五种I/O模型:1、阻塞I/O模型 最广泛的模型是阻塞I/O模型,默认情况下,所有套接口都是阻塞的。 进程调用recvfrom系统调用,整个过程是阻塞的,直到数据复制到进程缓冲区时才返回(当然,系统调用被中断也会返回).. 阅读全文
posted @ 2012-08-24 23:12 leealways87 阅读(1847) 评论(0) 推荐(0) 编辑
摘要: 网址http://www.linuxidc.com/linux/2010-03/25129.htm 阅读全文
posted @ 2012-08-14 10:22 leealways87 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 登录Linux后,BASH要读取几个文件,这些文件(启动脚本文件)用来定义BASH环境,如果希望建立标准的别名,或者希望设置各种shell变量,就应该在bash启动文件中进行设置。这几个文件是/etc/profile~/.bash_profile~/.bash_login~/.profile~/.bashrc BASH有三种常见的启动方式:登录交互式,即从字符终端登录或在X Window中启动终端窗口。BASH启动过程中首先读取文件1,然后按顺序读取文件2-4中遇到的第一个文件,启动后读取并运行文件5,前面文件的设置会被后面文件的设置所覆盖。通常文件1中设置系统环境变量,文件2-4设置用户自定 阅读全文
posted @ 2012-08-13 17:22 leealways87 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 开机显示:1 error:unknow filesystem2 grub rescue>出现这种现象的原因大概如下:1、要想删除Ubuntu,直接在window下删除/格式化ubuntu所在的分区2、调整磁盘3、安装linux,但是并没有安装grub实际上,grub2分为两个部分,一部分写在mbr上,另一部分写在了某个分区的/boot/grub目录(这里并没有考虑/boot被单独分区的情况,下文没有考虑)。解决方法,重新安装grub2:1,使用ls命令,找到linux安装分区,ID为83的2,1 grub rescue>set root=(hd0,5)2 grub rescue&g 阅读全文
posted @ 2012-08-13 11:37 leealways87 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 原文地址http://coolshell.cn/articles/5426.html最终还是要转过来自己慢慢消化,虽然基本操作没有问题,但是一些技巧性的东西还需要不断加强,不熟的命令用红色标出。第一级 – 存活安装vim启动 vim什么也别干!请先阅读当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子。但vim不是这样的,请按照下面的命令操作:启 动Vim后,vim在Normal模式下。让我们进入Insert模式,请按下键 i 。(陈皓注:你会看到vim左下角有一个–insert–字样,表示,你可以以插入的方式输入了)此时,你可以输入文本了,就像你用“记事本” 阅读全文
posted @ 2012-05-27 01:47 leealways87 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 原帖地址http://www.360doc.com/content/11/0521/11/5455634_118306098.shtml。首先,先稍微了解系统调用的概念:系统调用,英文名systemcall,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序,及别的功能,这些函数集合起来就叫做程序接口或应用编程接口(Application Programming Interface,API),我们要在这个系统上编写各种应用程序 阅读全文
posted @ 2012-05-26 18:33 leealways87 阅读(1244) 评论(0) 推荐(0) 编辑
摘要: test命令用于测试文件状态、数字和字符串,expr命令测试和执行数值输出。退出状态可用$?查看,0表示正确,其他数字表示错误。test一、测试文件状态test命令有两种格式:1 test <condition>2 [ <condition> ]注意:[]两端都要有空格。常用于测试文件状态的选项如下:1 -d 目录2 -s 文件长度大于0、非空3 -f 正规文件4 -w 可写5 -L 符号连接6 -u 文件有suid设置7 -r 可读8 -x 可执行例子如下: 1 lee@ubuntu:~/shell_study/cu$ ls -al 2 总用量 16 3 drwxr- 阅读全文
posted @ 2012-05-26 14:25 leealways87 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 声明时,C和C++都可以省略形参名,但是通常不建议这样做。在函数定义时,在C语言中,即使不使用形式参数,也不能省略参数名,而在C++中是可以的。#include<stdio.h>#include <stdlib.h>void test(char);intmain(void){ test('a');}void test(char ){ printf("hello\n");}编译如下:lee@ubuntu:~/program/fun$ gcc test_parameter.c test_parameter.c: In function ‘ 阅读全文
posted @ 2012-04-07 16:16 leealways87 阅读(1738) 评论(0) 推荐(0) 编辑
摘要: 先转一段网文:ns2的离散事件驱动原理(Scheduler,Handler,Event,Timer)首先是Scheduler,Handler和Event类的关系。 在NS2中,事件(Event)是基本的调度单元,比如发送一个Packet、接收一个Packet等等。每个Event都有自己的处理工具,这个工具就是一个Handler类的对象handler_。Handler中仅包含一个函数,描述对Event的处理方法,即handle(Event*e)。 给定一个事件,Scheduler将调用schedule(Handler* h, Event* e, double delay)函数,该函数设定Even 阅读全文
posted @ 2012-03-31 16:45 leealways87 阅读(1264) 评论(0) 推荐(0) 编辑
摘要: 当一个宏参数被放进宏体时,这个宏参数会首先被全部展开(有例外,见下文)。当展开后的宏参数被放进宏体时,预处理器对新展开的宏体进行第二次扫描,并继续展开。例如:#define PARAM( x ) x#define ADDPARAM( x ) INT_##xPARAM( ADDPARAM( 1 ) );因为ADDPARAM( 1 ) 是作为PARAM的宏参数,所以先将ADDPARAM( 1 )展开为INT_1,然后再将INT_1放进PARAM。例外情况是,如果PARAM宏里对宏参数使用了#或##,那么宏参数不会被展开:#define PARAM( x ) #x#define ADDPARAM( 阅读全文
posted @ 2012-03-29 17:26 leealways87 阅读(912) 评论(0) 推荐(0) 编辑