INT 21H中断指令

1、字符功能调用类(Character-Oriented Function)

01H、07H和08H —从标准输入设备输入字符

02H —字符输出

03H —辅助设备的输入

04H —辅助设备的输出

05H —打印输出

06H —控制台输入/输出

09H —显示字符串

0AH — 键盘缓冲输入

0BH —检测输入状态

0CH —清输入缓冲区的输入功能

(1)、功能01H、07H和08H

功能描述:从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾

入口参数:AH=01H,过滤掉控制字符,并回显

 =07H,不过滤掉控制字符,不回显

 =08H,过滤掉控制字符,不回显

出口参数:AL=输入字符的ASCII码

(2)、功能02H

功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满

入口参数:AH=02H

DL=待输出字符的ASCII码

出口参数:无

(3)、功能03H

功能描述:从辅助设备读入一个字符,该辅助设备的缺省值为COM1

入口参数:AH=03H

出口参数:AL=读入字符的ASCII码

(4)、功能04H

功能描述:向辅助设备输出一个字符,该辅助设备的缺省值为COM1

入口参数:AH=04H

DL=待输出字符的ASCII码

出口参数:无

(5)、功能05H

功能描述:向标准的输出设备输出一个字符。该缺省的输出设备为LPT1端口的打印机,除非用MODE命令来改变

入口参数:AH=05H

DL=待输出字符的ASCII码

出口参数:无

(6)、功能06H

功能描述:控制台(如:键盘、屏幕)输入/输出。如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满

入口参数:AH=06H,DL=输入/输出功能选择

出口参数:若DL=00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;

若DL=0FFH,则此功能为输入,此时:若ZF=1,则无字符可读,否则,AL=读入字符的ASCII码

(7)、功能09H

功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满

入口参数:AH=09H

DS:DX=待输出字符的地址

说明:待显示的字符串以’$’作为其结束标志

出口参数:无

(8)、功能0AH

功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾

入口参数:AH=0AH

DS:DX=存放输入字符的起始地址

接受输入字符串缓冲区的定义说明:

  1、第一个字节为缓冲区的最大容量,可认为是入口参数;

  2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;

  3、从第三个字节开始存放实际输入的字符串;

  4、字符串以回车键结束,回车符是接受的最后一个字符;

  5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。

例如:

  BUFF 80, ?, 80 DUP(?)   ;最多接受80个字符

出口参数:无

(9)、功能0BH

功能描述:检查标准输入设备上是否有字符可读。该输入操作可被重定向

入口参数:AH=0BH

出口参数:AL=00H——无字符可读;FFH——有字符可读

(10)、功能0CH

功能描述:清空当前的标准输入缓冲区,再读入字符。其输入操作可被重定向

入口参数:AH=0CH

AL=01H、06H、07H、08H或0AH

出口参数:若入口参数AL为0AH,则DS:DX=存放输入字符的起始地址,否则,出口参数AL=输入字符的ASCII码

2、目录控制功能(Directory-Control Function)

39H —创建目录

3AH —删除目录

3BH —设置当前目录

47H —读取当前目录

(1)、功能39H

功能描述:用指定的驱动器和路径创建一个新目录

入口参数:AH=39H

DS:DX=指定路径的字符串地址(以0为字符串的结束标志)

出口参数:CF=0——创建成功,否则,AX=错误号(03H或05H),其含义见错误代码表

(2)、功能3AH

功能描述:删除指定的驱动器和路径的目录

入口参数:AH=3AH

DS:DX=指定路径的字符串地址(以0为字符串的结束标志)

出口参数:CF=0——删除成功,否则,AX=错误号(03H或05H),其含义见错误代码表

(3)、功能3BH

功能描述:用指定的驱动器和路径设置为当前目录

入口参数:AH=3BH

DS:DX=指定路径的字符串地址(以0为字符串的结束标志)

出口参数:CF=0——设置成功,否则,AX=错误号(03H),其含义见错误代码表

(4)、功能47H

功能描述:取当前目录的完全路径字符串

入口参数:AH=47H

DL=驱动器号(0=缺省,1=A,…)

DS:SI=存放当前目录字符串的地址

出口参数:CF=0——读取成功,否则,AX=错误号(0FH),其含义见错误代码表

3、磁盘管理功能(Disk-Management Function)

0DH —磁盘复位

0EH —选择磁盘

19H —读取当前驱动器

1BH, 1CH —读取驱动器数据

2EH —设置校验标志

36H —读取驱动器分配信息

54H —读取校验标志

(1)、功能0DH

功能描述:清空当前的文件缓冲区,但在MS-DOS内,暂时写入缓冲区的数据将写入磁盘

入口参数:AH=0DH

出口参数:无

(2)、功能0EH

功能描述:指定当前驱动器

入口参数:AH=0EH

DL=驱动器号(0=A,1=B,…)

出口参数:AL=系统中当前的驱动器号

(3)、功能19H

功能描述:取当前缺省驱动器号

入口参数:AH=19H

出口参数:AL=驱动器号(0=A,1=B,…)

(4)、功能1BH和1CH

功能描述:获得驱动器的分配信息

入口参数:AH=1BH——为缺省驱动器

AH=1CH——为任意驱动器,DL=驱动器号(0=缺省,1=A,…)

出口参数:AL=0FFH——失败,否则,

  AL=每簇的扇区数

  DS:BX=ID字节的地址

  CX=物理扇区的大小(字节数)

  DX=驱动器的簇数

(5)、功能2EH

功能描述:设置/清除操作系统自动读取检验标志

入口参数:AH=2EH

DL=00H

AL=00H——清除该标志,01H——设置该标志

出口参数:无

(6)、功能36H

功能描述:取选定驱动器的信息

入口参数:AH=36H

DL=驱动器号(0-缺省,1=A,2=B,…)

出口参数:若功能调用失败,AX=0FFFFH,否则,

  AX=每簇的扇区数

  BX=可用的簇数

  CX=物理扇区的大小(字节数)

  DX=驱动器中的簇数

(7)、功能54H

功能描述:读取校验标志

入口参数:AH=54H

出口参数:AL=当前检验标志值:00H—关检验,01H—开检验

4、文件操作功能(File Operation Function)

3CH —创建文件

3DH —打开文件

3EH —关闭文件

41H —删除文件

43H —读取/设置文件属性

45H —复制文件句柄

46H —重定义文件句柄

4EH —查找到第一个文件

4FH —查找下一个文件

56H — 文件换名

57H —读取/设置文件的日期和时间

5AH —创建临时文件

5BH —创建新文件

67H —设置文件句柄数(最多文件数)

6CH —扩展的打开文件功能(打开、创建或替换文件)

(1)、功能3CH

功能描述:用指定的文件名创建一个新文件。如果指定的文件已存在,则设置其长度为0。创建后,该文件是打开的,并返回其句柄

入口参数:AH=3CH

DS:DX=指定文件名字符串的地址(以0为字符串的结束标志)

CX=文件属性(这些标志位可以组合) 位0=1——只读

位2=1——系统

位5=1——归档位1=1——隐含

位3=1——卷标号

其它位保留不用,并置为0

出口参数:CF=0——创建成功,AX=文件句柄,否则,AX=错误号(03H、04H或05H),其含义见错误代码表

(2)、功能3DH

功能描述:打开指定的驱动器、路径和文件名,并返回其文件句柄

入口参数:AH=3DH

DS:DX=表明文件的字符串(以0为字符串的结束标志)

AL为打开方式: 位0~2000—只读方式  001—写方式  010—读/写方式

位3保留,其值为0

位4~6共享模式 000—兼容模式001—不共享010—拒绝写

011—拒绝读100—不拒绝任何操作

位7继承标志——0/1:子进程继承或不继承句柄

出口参数:CF=0——打开成功,AX=文件句柄,否则,AX=错误号(02H、03H、04H、05H或0CH),其含义见错误代码表

(3)、功能3EH

功能描述:关闭指定句柄的文件

入口参数:AH=3EH

BX=文件句柄

出口参数:CF=0——关闭成功,否则,AX=错误号(06H),其含义见错误代码表

(4)、功能41H

功能描述:删除指定的文件

入口参数:AH=41H

DS:DX=文件名字符串的地址

出口参数:CF=0——删除成功,否则,AX=错误号(02H、03H或05H),其含义见错误代码表

(5)、功能43H

功能描述:读取或设置指定文件的属性

入口参数:AH=43H

BX=文件句柄

DS:DX=文件名字符串的地址

AL=00H/01H——读取/设置文件属性

CX=文件属性: 位0=1——只读位1=1——隐含

位2=1——系统位3=1——卷标号

位5=1——归档其它位保留不用,并置为0

出口参数:CF=0——关闭成功,CX=文件属性,否则,AX=错误号(01H、02H、03H或05H),其含义见错误代码表

(6)、功能45H

功能描述:复制当前打开设备或文件的句柄,该句柄对应同样设备或文件的相同位置

入口参数:AH=45H

BX=待复制的文件句柄

出口参数:CF=0——复制成功,AX=新句柄,否则,AX=错误号(04H或06H),其含义见错误代码表

(7)、功能46H

功能描述:指定二个句柄,把第二句柄指向第一个句柄,即第二个句柄被重定向

入口参数:AH=46H

BX=文件或设备的句柄

CX=待重定向的文件句柄

出口参数:CF=0——重定向成功,否则,AX=错误号(04H或06H),其含义见错误代码表

(8)、功能4EH

功能描述:获取第一个与给定的文件名相匹配的文件

入口参数:AH=4EH

DS:DX=给定文件名的字符串

CX=搜索时使用的文件属性: 位0=1——只读  位1=1——隐含

位2=1——系统  位3=1——卷标号

位4=1——目录  位5=1——归档

其它位保留不用,并置为0

出口参数:CF=1——操作失败,AX=错误号(02H、03H或12H),其含义见错误代码表,否则,操作成功,DTA(Disk Transfer

Area)按下列方式填入数据: 字节00~14H保留

字节15H匹配的文件属性

字节16~17H压缩的文件名

字节18~19H压缩的文件日期

字节1A~1DH文件大小

字节1E~2AH文件名字符串

(9)、功能4FH

功能描述:在中断21H的功能4EH成功使用之后,再搜索下一个文件名

入口参数:AH=4FH

AL=返回的代码

出口参数:CF=1——操作失败,AX=错误号(12H),其含义见错误代码表,否则,操作成功,DTA中的数据如前面功能4EH所示

(10)、功能56H

功能描述:文件换名

入口参数:AH=56H

DS:DX=当前文件名字符串地址

ES:DI=新文件名字符串地址

出口参数:CF=0——操作成功,否则,AX=错误号(02H、03H、05H、11H),其含义见错误代码表

(11)、功能57H

功能描述:读取/设置文件的日期和时间

入口参数:AH=57H

BX=文件句柄 读取日期和时间AL=00H

设置日期和时间AL=01H

CX=时间(0F~0BH:小时,0AH~05H:分钟,04H~00H:2秒的个数)

DX=日期(0F~09H:年(相对1980年),08H~05H:月,04H~00H:日)

出口参数:CF=1——操作失败,AX=错误号(01H、06H),其含义见错误代码表,否则,若是读文件信息,则,CX=时间,DX=日期

(12)、功能5AH

功能描述:创建临时文件

入口参数:AH=5AH

DS:DX=路径名的地址

CX=文件属性(位可组合),其定义如下: 位0=1 只读位3-4=0  保留

位1=1 隐含位5=1   归档

位2=1 系统位6-15=0 保留

出口参数:CF=0——操作成功,AX=文件句柄,DS:DX=完整的路径文件地址,否则,AX=错误号(03H、04H或05H),其含义见错误代码表

(13)、功能5BH

功能描述:创建新文件

入口参数:AH=5BH

DS:DX=路径名的地址

CX=文件属性(位可组合),其定义如下: 位0=1只读位4=0保留

位1=1隐含位5=1归档

位2=1系统位6-15=0保留

位3=1卷标号

出口参数:CF=0——操作成功,AX=文件句柄,否则,AX=错误号(03H、04H、05H或50H),其含义见错误代码表

(14)、功能67H

功能描述:设置文件句柄数(最多文件数)

入口参数:AH=67H

BX=句柄的数量

出口参数:CF=0——操作成功,否则,AX=错误号,其含义见错误代码表

(15)、功能6CH

功能描述:扩展的打开文件功能(打开、创建或替换文件)

入口参数:AH=6CH

AL=00H

DS:SI=路径名的地址

BX=打开方式 位2~0000—只读  001—只写  010—可读、写

位3保留(0)

位6~4000—兼容   001—拒绝读写  010——拒绝写

011—拒绝读  100——不拒绝任何操作

位70—子进程继承句柄,1—子进程不继承句柄

位12~8保留(0)

位13致命错误处理程序,0—执行INT 24H,否则,返回错误代码给进程

位14写入方式:0—写入缓冲区,1—直接写入文件

位15保留(0)

CX=文件属性

位0=1 只读位4=0   保留

位1=1 隐含位5=1   归档

位2=1 系统位6-15=0  保留

位3=1 卷标签

DX=打开标志 位3~0  0—打开失败,1—打开文件,2—替换文件

位7~4  0—打开失败,1—创建文件

位15~8  0—保留

出口参数:CF=1——操作失败,AX=错误号,其含义见错误代码表,否则,

AX=文件句柄

CX=1——文件存在,打开之

 =2——文件不存在,创建之

5、文件操作功能(FCB)(File Operation Function)

0FH —打开文件

10H —关闭文件

11H、12H —查找第一个或下一个文件

13H —删除文件

16H —创建文件

17H —文件换名

23H —读取文件的大小

29H —分析文件名

(1)、功能0FH

功能描述:打开文件,并使之为顺序读/写作好准备

入口参数:AH=0FH

DS:DX=文件控制块的地址

出口参数:AL=00H——打开成功,否则,AL=FFH(如文件找不到)

在MS-DOS操作系统中,文件控制块的字段如下表所示。 字段名偏移量字段含义

驱动器字00H1 for drive A, 2 for drive B,…

当前块字段0CH00H

记录大小字段0EH0080H

文件长度字段10H文件字节数

日期字段14H日期

时间字段16H时间

(2)、功能10H

功能描述:关闭文件

入口参数:AH=10H

DS:DX=文件控制块的地址

出口参数:AL=00H——关闭成功,否则,AL=FFH

(3)、功能11H和12H

功能描述:查找第一个或下一个相匹配的文件

入口参数:AH=11H——第一个相匹配的文件

  =12H——下一个相匹配的文件

DS:DX=文件控制块的地址

出口参数:AL=00H——查找到,否则,AL=FFH

(4)、功能13H

功能描述:在指定(或缺省)的驱动器中,删除所有相匹配的文件

入口参数:AH=13H

DS:DX=文件控制块的地址

出口参数:AL=00H——删除成功,否则,AL=FFH

(5)、功能16H

功能描述:在当前目录中创建一个文件,其文件长度为0,并打开该文件,为随后的读/写操作作好必要的准备

入口参数:AH=16H

DS:DX=未打开的文件控制块的地址

出口参数:AL=00H——创建成功,否则,AL=FFH(如:磁盘满)

(6)、功能17H

功能描述:在指定的驱动器的当前目录中,把所有相匹配的文件换名

入口参数:AH=17H

DS:DX=指定文件控制块的地址

出口参数:AL=00H——换名成功,否则,AL=FFH

(7)、功能23H

功能描述:在当前目录中查找一个相匹配的文件。如果发现,则用其记录数来更新其文件大小

入口参数:AH=23H

DS:DX=未打开的文件控制块的地址

出口参数:AL=00H——匹配成功,FCB中偏移量为21H的字段被设置为其记录数,否则,AL=0FFH

(8)、功能29H

功能描述:分析一个字符串(文件名)置入FCB表中的不同字段

入口参数:AH=29H

CX=要写入的记录数

DS:SI=字符串段的地址

ES:DI=FCB的地址

AL=分析的控制标志位 位3=1——若字符串中有文件后缀,则FCB中的文件后缀将改变

=0——若后缀忽略修改,或若分析后无后缀,则FCB中后缀字段被置为“空”

位2=1——若字符串中有文件名,则FCB中的文件名将改变

=0——若文件名忽略修改,或若分析后无文件名,则FCB中文件名字段被置为“空”

位1=1——若字符串中指定了驱动器号,则FCB中的ID字节被修改

=0——若ID字节忽略修改,或若分析后没有指定驱动器号,则FCB中驱动器字段被置为0(缺省值)

位0=1——

=0——忽略前导分割符

不忽略前导分割符

出口参数:AL=00H—没有通配字符 01H—有通配字符 FFH—驱动器号非法

DS:SI=分析后文件名第一个字符的地址

ES:DI=格式化后的、未打开的FCB地址

6、记录操作功能(Record Function)

1AH —设置数据传输区地址

2FH —读取数据传输区地址

3FH —读文件或设备

40H —写文件或设备

42H —设置文件指针

5CH —文件区域加锁或解锁

68H —提交文件缓冲区数据

(2)、功能2FH

功能描述:为FCB读/写操作而获取DTA的当前地址

入口参数:AH=2FH

出口参数:ES:BX=DTA的段地址和偏移量

(3)、功能3FH

功能描述:从先前打开的文件中读出指定数目的字节,并移动文件指针

入口参数:AH=3FH

BX=文件句柄

CX=将要读出的字节数

DS:DX=存放字符的缓冲区地址

出口参数:CF=0——读取成功,AX=读取的字符数,否则,AX=错误号(05H或06H),其含义见错误代码表

(4)、功能40H

功能描述:向先前打开的文件写入指定数量的字节,并相应修改文件指针

入口参数:AH=40H

BX=文件句柄

CX=写入的字节数

DS:DX=存放数据的缓冲区地址

出口参数:CF=0——关闭成功,AX=写入的字节数,否则,AX=错误号(05H或06H),其含义见错误代码表

(5)、功能42H

功能描述:设置文件指针的相对位置(相对与文件头、文件尾和当前位置)

入口参数:AH=42H

BX=文件句柄

CX=偏移量的高位

DX=偏移量的低位

AL=00H——从文件头开始的绝对偏移量

 =01H——从当前文件指针开始的偏移量(可带符号)

 =02H——从文件尾开始的偏移量(可带符号)

出口参数:CF=0——设置成功,DX是指针的高位,AX是其低位,否则,AX=错误号(01H和06H),其含义见错误代码表。

(6)、功能5CH

功能描述:文件区域加锁或解锁

入口参数:AH=5CH

AL=00H——区域加锁  01H——区域解锁

BX=文件句柄

CX:DX=区域偏移量

SI:DI=区域长度

DS:DX=路径名的地址

出口参数:CF=0——操作成功,否则,AX=错误号(01H、06H、21H或24H),其含义见错误代码表

(7)、功能68H

功能描述:提交文件缓冲区数据

入口参数:AH=68H

BX=文件句柄

出口参数:CF=0——操作成功,否则,AX=错误号,其含义见错误代码表

PS:最近翻出来的资料,很老了,原作者不详。

Win7调试服务程序,Debugbreak函数不响应,直接退出

上周调试Win7下的一个服务程序,以前都是用Debugbreak()直接可以进入调试的,但这次直接退出了。

查了一下,这样设置一下就可以:
控制面板->操作中心->维护->检查问题报告的解决方案->设置
每次发生问题时,在检查解决方案之前先询问我

保存设置后,就可以进入断点了,再次鄙视微软。

后来,又发现,即使设置后,仍然无法响应断点,没办法,只好用比较挫的代码搞定了:

	//在第一个DebugBreak()前面,添加下面的语句
	while(!IsDebuggerPresent())
	{
		Sleep(100);
	}
	DebugBreak();

这样,服务启动后,会一直等待调试器。启动服务后,手动通过VS、任务管理器或Process Explorer附加到进程,就可以对启动的服务进行调试了。

参考:
DebugBreak not breaking

JVM常用参数设置

运行方式设置
-client
-server
两者的区别在JIT的编译比例及GC的方式不同,也可以近似的这样理解:client会启动比较快,GC默认为串行,但JIT编译较少,速度慢一些;server启动慢,GC默认为并行,但JIT编译较多,开始速度慢,但JIT编译后会越来越快。

内存设置
-Xms
设置初始化堆的大小

-Xmx
设置最大堆大小

-Xss 或 -XX:ThreadStackSize
设置每个线程栈大小

-Xmn 或 -XX:NewSize
设置年轻代的内存大小

-XX:MaxNewSize
设置最大年轻代新生代内存大小

-XX:PermSize
设置持久代内存大小

-XX:MaxPermSize
设置最大值持久代内存大小

-XX:NewRatio
设置年轻代与年老代的比值

-XX:SurvivorRatio
设置年轻代中Eden区与Survivor区的大小比值

GC设置
-XX:+DisableExplicitGC
禁用java代码中的System.gc()

-XX:+UseSerialGC
设置串行收集器

-XX:+UseParallelGC 或 -XX:+UseParNewGC
设置年轻代为并行收集器

-XX:ParallelGCThreads
设置并行收集器的线程数

或 -XX:+UseParallelOldGC
设置年老代为并行收集

-XX:+UseConcMarkSweepGC
设置年老代为CMS收集

-XX:MaxGCPauseMillis
一次GC最大的停顿时间

-XX:GCTimeRatio
GC占用CPU时间比例

调试GC
-verbose:gc
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:PrintHeapAtGC

调试加载类
-verbose:class 监视加载的类的情况

调试JNI
-verbose:jni

设置字符集为UTF-8
-Djavax.servlet.request.encoding=utf-8
-Dfile.encoding=utf-8

调试SSL
-Djavax.net.debug=ssl:record
-Djavax.net.debug=ssl:handshake
-Djavax.net.debug=all

内存溢出时抓取JVM快照
-XX:+HeapDumpOnOutOfMemoryError

一家IT公司最重要的财产是什么?

这个问题问过一些人,也在网上找过答案,有人说IT公司最重要的财产是源码,有人说是产品,有人说是客户,也有人说是关系。
其实这些回答,都是有一定道理的。

但我今天想说的答案却是:传承。
这里的传承,不仅是源码,不仅是产品,不仅是业务知识,不仅是编程技巧,更是一种精神,一种文化,一种理念,一种信仰。传承可以将一盘散沙铸成利剑,披荆斩棘。传承可以凝聚成一股强大的力量,无往而不利。

传承,在一个公司的不同阶段,有着不同的表现和不同的作用。

在公司的创业阶段,传承是靠个人来完成的。
这个阶段,公司规模很小,人员很少,是公司对个人依赖最强的阶段,但也是转型最快的阶段。
这个阶段,个人要有很强的付出精神,加班加点甚至通宵是常有的事情。是一个很累很痛苦,但也很充实很快乐的阶段。
创业团队的个人能力及付出,很大程度上决定着公司的未来,
这个阶段,沟通不要很多成本,但每个人都要独挡一面,一个都不能少。
知识都存在人的大脑中,靠人的记忆传递下来。

在公司迅速扩张的阶段,传承是靠传帮带及梯队建设来完成的。
这个阶段,公司初具规模,是对管理层能力要求最高的阶段。
管理层不仅要懂开发,而且要懂运营管理,可以团结力量,调动大家的积极性,沟通成本急速上升。
这个阶段,是公司文化形成的时期,各个环节处理的好坏,直接决定了公司的命运。
这个阶段,知识及文化的传播,主要依赖于师徒关系,一点儿一点儿扩散开来。梯队起来了,稳定了,也就成了;梯队一直不稳定,尤其是核心团队不稳定,也就危险了。

在公司平稳发展的阶段,传承是靠制度及培训完成的。
公司发展到一定规模,个人能力对公司的改变越来越小,甚至被称为螺丝钉。
这个阶段,主要靠公司的制度来保证公司的运营。员工进入公司时,便会接收大量培训,个人按制度完成自己的职责,保障公司正常运营,从而实现公司盈利。
这个阶段,个人对公司的影像变小,很难有所改变。但灵魂人物的作用却变得强大,因为灵魂人物要团结所有人,向应该努力的方向前进。

没有传承,一家公司就谈不上发展;
没有传承,一家公司就一直在走相同的老路;
没有传承,一家公司就会逐渐消亡;

传承,随着一家公司的进步而慢慢改变;
传承,决定了一家公司的气质及未来;
传承,是一家公司最宝贵的财产。

Android Custom Protocol中intent-filter的data标签

当在Android中使用Custom Protocol时,需要在AndroidManifest.xml中,增加相应的intent-filter标签。
其中intent-filter下的data标签,通知了Android,何时处理调用请求,其语法如下:

    <data android:scheme="string"
          android:host="string"
          android:port="string"
          android:path="string"
          android:pathPattern="string"
          android:pathPrefix="string"
          android:mimeType="string" />

其实,上述内容描述了一个URI,当第三方调阅请求不符合该URI时,会直接忽略;而当第三方调阅请求符合该URI时,则会进行调用或让用户进行选择。

URI的具体规则如下:

<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

如果没有指定scheme,则整个URI无效;
如果没有指定host,则port属性无效;

其各属性说明如下:
scheme:就是协议名称,如http,https,myprotocol等,建议全部小写,而且不包含“:”。
host:ip地址或域名,建议全部小写。
port:端口
path:完全路径匹配
pathPrefix:路径前缀匹配
pathPattern:路径匹配规则(例如:“*”表示字符重复出现0到多次;“.”表示任意字符;“.*”表示0到多个任意字符;转义符为“\”,由于xml的格式限制,非转义的“*”要写为“\\*”,非转移的“\”要写为“\\\\”。)
mimeType:指定MIME类型,如image/jpeg,其中子类型可以使用通配符“*”,建议全部小写。

	<!--http协议下的任何pdf文件-->
	<intent-filter>
		<action android:name="android.intent.action.VIEW"/>
		<category android:name="android.intent.category.DEFAULT"/>
		<data android:scheme="http" android:pathPattern=".*\\.pdf"]</data>
	</intent-filter>

	<!--任何音频文件-->
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:mimeType="audio/*" />
	</intent-filter>

	<!--自定义私有协议myproto的任何请求-->
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:scheme="myproto"/>
	</intent-filter>

参考资料:
Android开发手册
newcj的博客

IOS实现Custom Protocol

在IOS中,实现Custom Protocol,需要以下两步:

1、修改Info.plist文件,增加以下内容:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.neohope.custom.protocol.test</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myproto</string>
            </array>
        </dict>
    </array>

2、在AppDelegate.m中,增加以下内容:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if(url!=nil)
    {
        NSString *path = url.absoluteString;
        //do your job here
    }
    return YES;
}

Andoid实现Custom Protocol

Android中实现Custom Protocol,只需要简单的两步:

1、修改AndroidManifest.xml文件,在activity节增加以下内容:

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="myproto"/>
            </intent-filter>

2、修改对应activity中,用以下代码,就可以处理URL中的数据啦

        Intent intent = getIntent();
        if (Intent.ACTION_VIEW.equals(intent.getAction())) {
            Uri uri = intent.getData();
            String user = uri.getQueryParameter("user");
            String password = uri.getQueryParameter("password");
            //do your job here
        }

常用MIME Type

MIME Type组成规则为:content-type/subtype
content-type:消息内容的类型,比如text,application,multipart,image,audio,video,message
subtype:消息内容的子类型,比如:content-type为text时,常用的子类型有plain,html等。最终MIME Type为:text/plain,text/html。

文件类型 MIME 文件类型 MIME
3gp video/3gpp aab application/x-authoware-bin
aam application/x-authoware-map aas application/x-authoware-seg
ai application/postscript aif audio/x-aiff
aifc audio/x-aiff aiff audio/x-aiff
als audio/X-Alpha5 amc application/x-mpeg
ani application/octet-stream apk application/vnd.android.package-archive
asc text/plain asd application/astound
asf video/x-ms-asf asn application/astound
asp application/x-asap asx video/x-ms-asf
au audio/basic avb application/octet-stream
avi video/x-msvideo awb audio/amr-wb
bcpio application/x-bcpio bin application/octet-stream
bld application/bld bld2 application/bld2
bmp image/bmp bpk application/octet-stream
bz2 application/x-bzip2 cal image/x-cals
ccn application/x-cnc cco application/x-cocoa
cdf application/x-netcdf cgi magnus-internal/cgi
chat application/x-chat class application/octet-stream
clp application/x-msclip cmx application/x-cmx
co application/x-cult3d-object cod image/cis-cod
cpio application/x-cpio cpt application/mac-compactpro
crd application/x-mscardfile csh application/x-csh
csm chemical/x-csml csml chemical/x-csml
css text/css cur application/octet-stream
dcm x-lml/x-evm dcr application/x-director
dcx image/x-dcx dhtml text/html
dir application/x-director dll application/octet-stream
dmg application/octet-stream dms application/octet-stream
doc application/msword dot application/x-dot
dvi application/x-dvi dwf drawing/x-dwf
dwg application/x-autocad dxf application/x-autocad
dxr application/x-director ebk application/x-expandedbook
emb chemical/x-embl-dl-nucleotide embl chemical/x-embl-dl-nucleotide
eps application/postscript eri image/x-eri
es audio/echospeech esl audio/echospeech
etc application/x-earthtime etx text/x-setext
evm x-lml/x-evm evy application/x-envoy
exe application/octet-stream fh4 image/x-freehand
fh5 image/x-freehand fhc image/x-freehand
fif image/fif fm application/x-maker
fpx image/x-fpx fvi video/isivideo
gau chemical/x-gaussian-input gca application/x-gca-compressed
gdb x-lml/x-gdb gif image/gif
gps application/x-gps gtar application/x-gtar
gz application/x-gzip hdf application/x-hdf
hdm text/x-hdml hdml text/x-hdml
hlp application/winhlp hqx application/mac-binhex40
htm text/html html text/html
hts text/html ice x-conference/x-cooltalk
ico application/octet-stream ief image/ief
ifm image/gif ifs image/ifs
imy audio/melody ins application/x-NET-Install
ips application/x-ipscript ipx application/x-ipix
it audio/x-mod itz audio/x-mod
ivr i-world/i-vrml j2k image/j2k
jad text/vnd.sun.j2me.app-descriptor jam application/x-jam
jar application/java-archive jnlp application/x-java-jnlp-file
jpe image/jpeg jpeg image/jpeg
jpg image/jpeg jpz image/jpeg
js application/x-javascript jwc application/jwc
kjx application/x-kjx lak x-lml/x-lak
latex application/x-latex lcc application/fastman
lcl application/x-digitalloca lcr application/x-digitalloca
lgh application/lgh lha application/octet-stream
lml x-lml/x-lml lmlpack x-lml/x-lmlpack
lsf video/x-ms-asf lsx video/x-ms-asf
lzh application/x-lzh m13 application/x-msmediaview
m14 application/x-msmediaview m15 audio/x-mod
m3u audio/x-mpegurl m3url audio/x-mpegurl
ma1 audio/ma1 ma2 audio/ma2
ma3 audio/ma3 ma5 audio/ma5
man application/x-troff-man map magnus-internal/imagemap
mbd application/mbedlet mct application/x-mascot
mdb application/x-msaccess mdz audio/x-mod
me application/x-troff-me mel text/x-vmel
mi application/x-mif mid audio/midi
midi audio/midi mif application/x-mif
mil image/x-cals mio audio/x-mio
mmf application/x-skt-lbs mng video/x-mng
mny application/x-msmoney moc application/x-mocha
mocha application/x-mocha mod audio/x-mod
mof application/x-yumekara mol chemical/x-mdl-molfile
mop chemical/x-mopac-input mov video/quicktime
movie video/x-sgi-movie mp2 audio/x-mpeg
mp3 audio/x-mpeg mp4 video/mp4
mpc application/vnd.mpohun.certificate mpe video/mpeg
mpeg video/mpeg mpg video/mpeg
mpg4 video/mp4 mpga audio/mpeg
mpn application/vnd.mophun.application mpp application/vnd.ms-project
mps application/x-mapserver mrl text/x-mrml
mrm application/x-mrm ms application/x-troff-ms
mts application/metastream mtx application/metastream
mtz application/metastream mzv application/metastream
nar application/zip nbmp image/nbmp
nc application/x-netcdf ndb x-lml/x-ndb
ndwn application/ndwn nif application/x-nif
nmz application/x-scream nokia-op-logo image/vnd.nok-oplogo-color
npx application/x-netfpx nsnd audio/nsnd
nva application/x-neva1 oda application/oda
oom application/x-AtlasMate-Plugin pac audio/x-pac
pae audio/x-epac pan application/x-pan
pbm image/x-portable-bitmap pcx image/x-pcx
pda image/x-pda pdb chemical/x-pdb
pdf application/pdf pfr application/font-tdpfr
pgm image/x-portable-graymap pict image/x-pict
pm application/x-perl pmd application/x-pmd
png image/png pnm image/x-portable-anymap
pnz image/png pot application/vnd.ms-powerpoint
ppm image/x-portable-pixmap pps application/vnd.ms-powerpoint
ppt application/vnd.ms-powerpoint pqf application/x-cprplayer
pqi application/cprplayer prc application/x-prc
proxy application/x-ns-proxy-autoconfig ps application/postscript
ptlk application/listenup pub application/x-mspublisher
pvx video/x-pv-pvx qcp audio/vnd.qcelp
qt video/quicktime qti image/x-quicktime
qtif image/x-quicktime r3t text/vnd.rn-realtext3d
ra audio/x-pn-realaudio ram audio/x-pn-realaudio
rar application/x-rar-compressed ras image/x-cmu-raster
rdf application/rdf+xml rf image/vnd.rn-realflash
rgb image/x-rgb rlf application/x-richlink
rm audio/x-pn-realaudio rmf audio/x-rmf
rmm audio/x-pn-realaudio rmvb audio/x-pn-realaudio
rnx application/vnd.rn-realplayer roff application/x-troff
rp image/vnd.rn-realpix rpm audio/x-pn-realaudio-plugin
rt text/vnd.rn-realtext rte x-lml/x-gps
rtf application/rtf rtg application/metastream
rtx text/richtext rv video/vnd.rn-realvideo
rwc application/x-rogerwilco s3m audio/x-mod
s3z audio/x-mod sca application/x-supercard
scd application/x-msschedule sdf application/e-score
sea application/x-stuffit sgm text/x-sgml
sgml text/x-sgml sh application/x-sh
shar application/x-shar shtml magnus-internal/parsed-html
shw application/presentations si6 image/si6
si7 image/vnd.stiwap.sis si9 image/vnd.lgtwap.sis
sis application/vnd.symbian.install sit application/x-stuffit
skd application/x-Koan skm application/x-Koan
skp application/x-Koan skt application/x-Koan
slc application/x-salsa smd audio/x-smd
smi application/smil smil application/smil
smp application/studiom smz audio/x-smd
snd audio/basic spc text/x-speech
spl application/futuresplash spr application/x-sprite
sprite application/x-sprite spt application/x-spt
src application/x-wais-source stk application/hyperstudio
stm audio/x-mod sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc svf image/vnd
svg image/svg-xml svh image/svh
svr x-world/x-svr swf application/x-shockwave-flash
swfl application/x-shockwave-flash t application/x-troff
tad application/octet-stream talk text/x-speech
tar application/x-tar taz application/x-tar
tbp application/x-timbuktu tbt application/x-timbuktu
tcl application/x-tcl tex application/x-tex
texi application/x-texinfo texinfo application/x-texinfo
tgz application/x-tar thm application/vnd.eri.thm
tif image/tiff tiff image/tiff
tki application/x-tkined tkined application/x-tkined
toc application/toc toy image/toy
tr application/x-troff trk x-lml/x-gps
trm application/x-msterminal tsi audio/tsplayer
tsp application/dsptype tsv text/tab-separated-values
tsv text/tab-separated-values ttf application/octet-stream
ttz application/t-time txt text/plain
ult audio/x-mod ustar application/x-ustar
uu application/x-uuencode uue application/x-uuencode
vcd application/x-cdlink vcf text/x-vcard
vdo video/vdo vib audio/vib
viv video/vivo vivo video/vivo
vmd application/vocaltec-media-desc vmf application/vocaltec-media-file
vmi application/x-dreamcast-vms-info vms application/x-dreamcast-vms
vox audio/voxware vqe audio/x-twinvq-plugin
vqf audio/x-twinvq vql audio/x-twinvq
vre x-world/x-vream vrml x-world/x-vrml
vrt x-world/x-vrt vrw x-world/x-vream
vts workbook/formulaone wav audio/x-wav
wax audio/x-ms-wax wbmp image/vnd.wap.wbmp
web application/vnd.xara wi image/wavelet
wis application/x-InstallShield wm video/x-ms-wm
wma audio/x-ms-wma wmd application/x-ms-wmd
wmf application/x-msmetafile wml text/vnd.wap.wml
wmlc application/vnd.wap.wmlc wmls text/vnd.wap.wmlscript
wmlsc application/vnd.wap.wmlscriptc wmlscript text/vnd.wap.wmlscript
wmv audio/x-ms-wmv wmx video/x-ms-wmx
wmz application/x-ms-wmz wpng image/x-up-wpng
wpt x-lml/x-gps wri application/x-mswrite
wrl x-world/x-vrml wrz x-world/x-vrml
ws text/vnd.wap.wmlscript wsc application/vnd.wap.wmlscriptc
wv video/wavelet wvx video/x-ms-wvx
wxl application/x-wxl x-gzip application/x-gzip
xar application/vnd.xara xbm image/x-xbitmap
xdm application/x-xdma xdma application/x-xdma
xdw application/vnd.fujixerox.docuworks xht application/xhtml+xml
xhtm application/xhtml+xml xhtml application/xhtml+xml
xla application/vnd.ms-excel xlc application/vnd.ms-excel
xll application/x-excel xlm application/vnd.ms-excel
xls application/vnd.ms-excel xlt application/vnd.ms-excel
xlw application/vnd.ms-excel xm audio/x-mod
xml text/xml xmz audio/x-mod
xpi application/x-xpinstall xpm image/x-xpixmap
xsit text/xml xsl text/xml
xul text/xul xwd image/x-xwindowdump
xyz chemical/x-pdb yz1 application/x-yz1
z application/x-compress zac application/x-zaurus-zac
zip application/zip