一个日牯子
Home
Tags
GitHub
Author
2020-08-26
SVG
HTML
PDF
I
/
O
模
型
1
L
i
n
u
x
I
/
O
模
型
与
J
a
v
a
N
I
O
刨
根
问
底
探
索
分
析
C
o
n
t
e
n
t
s
I
/
O
模
型
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
五
种
模
型
同
步
于
异
步
、
阻
塞
与
非
阻
塞
J
a
v
a
中
的
I
/
O
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
即
与
,
包
含
了
文
件
的
读
写
或
者
是
网
络
的
。
在
中
有
五
种
模
型
:
从
开
始
引
入
,
在
推
出
了
。
那
么
,
不
同
的
模
型
之
间
具
体
有
什
么
差
异
,
又
该
如
何
使
用
呢
?
I
/
O
模
型
在
操
作
中
,
通
常
是
分
为
两
个
阶
段
的
:
首
先
是
等
待
数
据
就
绪
。
然
后
将
数
据
从
复
制
到
例
如
在
中
,
第
一
个
阶
段
就
是
等
待
从
网
络
发
送
数
据
过
来
,
然
后
存
入
内
核
的
缓
冲
区
。
然
后
第
二
个
阶
段
,
将
接
收
到
的
数
据
从
内
核
缓
冲
区
拷
贝
到
用
户
程
序
中
。
五
种
I
/
O
模
型
B
l
o
c
k
i
n
g
I
/
O
即
阻
塞
式
,
在
中
默
认
所
有
的
都
是
的
。
在
这
种
模
式
下
,
两
个
阶
段
都
是
阻
塞
的
。
这
个
过
程
类
似
这
样
:
d
a
t
a
=
r
e
c
v
f
r
o
m
(
s
o
c
k
e
t
)
N
o
n
-
b
l
o
c
k
i
n
g
I
/
O
将
设
置
为
之
后
,
如
果
数
据
没
有
就
绪
的
时
候
不
会
阻
塞
住
请
求
进
程
而
是
立
即
返
回
一
个
错
误
E
W
O
U
L
D
B
L
O
C
K
,
这
样
请
求
进
程
可
以
不
断
尝
试
去
获
取
是
否
有
数
据
就
绪
(
这
个
过
程
称
之
为
p
o
l
l
i
n
g
。
然
而
,
在
数
据
的
拷
贝
阶
段
,
这
个
过
程
还
是
的
。
I
/
O
模
型
2
d
o
{
d
a
t
a
=
r
e
c
v
f
r
o
m
(
s
o
c
k
e
t
)
}
w
h
i
l
e
(
d
a
t
a
=
=
E
W
O
U
L
D
B
L
O
C
K
)
I
/
O
m
u
l
t
i
p
l
e
x
i
n
g
多
路
复
用
是
通
过
单
个
进
程
管
理
多
个
网
络
连
接
的
一
种
方
式
,
通
常
有
s
e
l
e
c
t
,
p
o
o
l
和
e
p
o
l
l
等
几
种
方
式
。
在
这
种
模
式
下
,
会
被
设
置
为
,
通
过
不
断
轮
询
所
有
的
,
直
到
某
个
有
数
据
则
返
回
。
w
h
i
l
e
(
t
r
u
e
)
{
s
o
c
k
e
t
=
s
e
l
e
c
t
(
s
o
c
k
e
t
s
)
/
/
这
里
如
果
没
有
一
个
s
o
c
k
e
t
是
就
绪
的
就
会
一
直
阻
塞
d
a
t
a
=
r
e
c
v
f
r
o
m
(
s
o
c
k
e
t
)
/
/
同
样
从
内
核
拷
贝
数
据
到
p
r
o
c
e
s
s
的
时
候
也
是
b
l
o
c
k
的
}
一
个
更
具
体
的
例
子
:
w
h
i
l
e
(
1
)
{
F
D
_
Z
E
R
O
(
&
r
s
e
t
)
;
f
o
r
(
i
=
0
;
i
<
5
;
i
+
+
)
{
F
D
_
S
E
T
(
f
d
s
[
i
]
,
&
r
s
e
t
)
;
}
p
u
t
s
(
"
r
o
u
n
d
a
g
a
i
n
"
)
;
s
e
l
e
c
t
(
m
a
x
+
1
,
&
r
s
e
t
,
N
U
L
L
,
N
U
L
L
,
N
U
L
L
)
;
f
o
r
(
i
=
0
;
i
<
5
;
i
+
+
)
{
i
f
(
F
D
_
I
S
S
E
T
(
f
d
s
[
i
]
,
&
r
s
e
t
)
)
{
m
e
m
s
e
t
(
b
u
f
f
e
r
,
0
,
M
A
X
B
U
F
)
;
r
e
a
d
(
f
d
s
[
i
]
,
b
u
f
f
e
r
,
M
A
X
B
U
F
)
;
p
u
t
s
(
b
u
f
f
e
r
)
;
}
}
}
除
了
使
用
s
e
l
e
c
t
之
外
,
还
可
以
使
用
p
o
o
l
和
e
p
o
l
l
,
但
是
本
质
上
两
个
阶
段
都
会
。
看
起
来
除
了
可
以
处
理
多
个
连
接
之
外
没
啥
好
处
,
但
是
如
果
考
虑
到
使
用
多
线
程
的
话
,
那
么
r
e
c
v
f
r
o
m
可
以
在
线
程
中
处
理
,
理
论
上
可
以
提
高
吞
吐
。
S
i
g
n
a
l
d
r
i
v
e
n
I
/
O
这
种
模
式
下
首
先
将
设
置
为
,
然
后
通
过
s
i
g
a
c
t
i
o
n
注
册
一
个
回
调
。
这
个
过
程
不
是
的
,
一
旦
数
据
之
后
,
一
个
S
I
G
I
O
的
信
号
会
发
送
到
中
,
然
后
拷
贝
数
据
阶
段
依
然
是
的
。
h
a
n
d
l
e
r
=
(
)
-
>
{
r
e
c
v
f
r
o
m
(
s
o
c
k
e
t
)
}
s
i
g
a
c
t
i
o
n
(
s
o
c
k
e
t
,
h
a
n
d
l
e
r
)
A
s
y
n
c
h
r
o
n
o
u
s
I
/
O
在
模
式
下
,
两
个
阶
段
都
是
的
,
跟
模
式
的
区
别
在
于
,
前
者
是
当
数
据
之
后
通
知
应
用
去
读
取
;
而
是
内
核
直
接
将
数
据
拷
贝
到
完
成
之
后
通
知
。
J
a
v
a
中
的
I
/
O
3
同
步
于
异
步
、
阻
塞
与
非
阻
塞
同
步
异
步
、
阻
塞
和
非
阻
塞
比
较
中
是
这
样
定
义
的
:
同
步
是
指
请
求
的
进
程
被
阻
塞
一
直
到
操
作
结
束
异
步
不
导
致
请
求
进
程
阻
塞
根
据
这
个
定
义
,
除
了
之
外
,
其
他
四
种
都
是
的
,
因
为
数
据
复
制
阶
段
(
是
阻
塞
的
。
J
a
v
a
中
的
I
/
O
b
l
o
c
k
i
n
g
I
/
O
在
中
构
建
一
个
简
单
的
服
务
器
,
为
每
一
个
连
接
新
建
一
个
线
程
处
理
:
p
u
b
l
i
c
c
l
a
s
s
E
c
h
o
S
e
r
v
e
r
{
p
u
b
l
i
c
s
t
a
t
i
c
v
o
i
d
m
a
i
n
(
S
t
r
i
n
g
[
]
a
r
g
s
)
t
h
r
o
w
s
I
O
E
x
c
e
p
t
i
o
n
{
S
e
r
v
e
r
S
o
c
k
e
t
s
e
r
v
e
r
=
n
e
w
S
e
r
v
e
r
S
o
c
k
e
t
(
)
;
s
e
r
v
e
r
.
b
i
n
d
(
n
e
w
I
n
e
t
S
o
c
k
e
t
A
d
d
r
e
s
s
(
9
0
0
0
)
)
;
w
h
i
l
e
(
t
r
u
e
)
{
S
o
c
k
e
t
s
o
c
k
e
t
=
s
e
r
v
e
r
.
a
c
c
e
p
t
(
)
;
n
e
w
T
h
r
e
a
d
(
c
l
i
e
n
t
H
a
n
d
l
e
r
(
s
o
c
k
e
t
)
)
.
s
t
a
r
t
(
)
;
}
}
p
r
i
v
a
t
e
s
t
a
t
i
c
R
u
n
n
a
b
l
e
c
l
i
e
n
t
H
a
n
d
l
e
r
(
S
o
c
k
e
t
s
o
c
k
e
t
)
{
r
e
t
u
r
n
(
)
-
>
{
t
r
y
{
B
u
f
f
e
r
e
d
R
e
a
d
e
r
r
e
a
d
e
r
=
n
e
w
B
u
f
f
e
r
e
d
R
e
a
d
e
r
(
n
e
w
I
n
p
u
t
S
t
r
e
a
m
R
e
a
d
e
r
(
s
o
c
k
e
t
.
g
e
t
I
n
p
u
t
S
t
r
e
a
m
(
)
)
)
;
P
r
i
n
t
W
r
i
t
e
r
w
r
i
t
e
r
=
n
e
w
P
r
i
n
t
W
r
i
t
e
r
(
n
e
w
O
u
t
p
u
t
S
t
r
e
a
m
W
r
i
t
e
r
(
s
o
c
k
e
t
.
g
e
t
O
u
t
p
u
t
S
t
r
e
a
m
(
)
)
)
;
S
t
r
i
n
g
l
i
n
e
=
"
"
;
w
h
i
l
e
(
!
"
/
q
u
i
t
"
.
e
q
u
a
l
s
(
l
i
n
e
)
)
{
l
i
n
e
=
r
e
a
d
e
r
.
r
e
a
d
L
i
n
e
(
)
;
w
r
i
t
e
r
.
w
r
i
t
e
(
l
i
n
e
+
"
\
n
"
)
;
w
r
i
t
e
r
.
f
l
u
s
h
(
)
;
}
}
c
a
t
c
h
(
I
O
E
x
c
e
p
t
i
o
n
e
x
)
{
e
x
.
p
r
i
n
t
S
t
a
c
k
T
r
a
c
e
(
)
;
}
}
;
}
}
n
o
n
-
b
l
o
c
k
i
n
g
I
/
O
中
主
要
有
以
下
的
一
些
类
:
数
据
缓
冲
容
器
字
符
集
编
码
和
解
码
J
a
v
a
中
的
I
/
O
4
可
以
进
行
操
作
的
连
接
用
来
实
现
机
制
其
中
,
B
u
f
f
e
r
中
可
以
存
储
固
定
大
小
的
容
器
,
而
其
中
的
B
y
t
e
B
u
f
f
e
r
类
比
较
特
殊
:
可
以
作
为
操
作
的
目
标
可
以
分
配
为
,
会
尝
试
进
行
原
生
的
操
作
以
提
高
性
能
可
以
直
接
文
件
的
一
部
分
到
中
M
a
p
p
e
d
B
y
t
e
B
u
f
f
e
r
,
支
持
一
些
额
外
的
文
件
操
作
可
以
自
定
义
字
节
序
使
用
实
现
一
个
p
u
b
l
i
c
c
l
a
s
s
N
i
o
E
c
h
o
S
e
r
v
e
r
{
p
u
b
l
i
c
s
t
a
t
i
c
v
o
i
d
m
a
i
n
(
S
t
r
i
n
g
[
]
a
r
g
s
)
{
t
r
y
(
S
e
l
e
c
t
o
r
s
e
l
e
c
t
o
r
=
S
e
l
e
c
t
o
r
.
o
p
e
n
(
)
;
S
e
r
v
e
r
S
o
c
k
e
t
C
h
a
n
n
e
l
s
e
r
v
e
r
S
o
c
k
e
t
=
S
e
r
v
e
r
S
o
c
k
e
t
C
h
a
n
n
e
l
.
o
p
e
n
(
)
)
{
s
e
r
v
e
r
S
o
c
k
e
t
.
b
i
n
d
(
n
e
w
I
n
e
t
S
o
c
k
e
t
A
d
d
r
e
s
s
(
9
9
9
9
)
)
;
s
e
r
v
e
r
S
o
c
k
e
t
.
c
o
n
f
i
g
u
r
e
B
l
o
c
k
i
n
g
(
f
a
l
s
e
)
;
s
e
r
v
e
r
S
o
c
k
e
t
.
r
e
g
i
s
t
e
r
(
s
e
l
e
c
t
o
r
,
S
e
l
e
c
t
i
o
n
K
e
y
.
O
P
_
A
C
C
E
P
T
)
;
B
y
t
e
B
u
f
f
e
r
b
u
f
f
e
r
=
B
y
t
e
B
u
f
f
e
r
.
a
l
l
o
c
a
t
e
(
4
)
;
w
h
i
l
e
(
t
r
u
e
)
{
s
e
l
e
c
t
o
r
.
s
e
l
e
c
t
(
)
;
f
i
n
a
l
S
e
t
<
S
e
l
e
c
t
i
o
n
K
e
y
>
s
e
l
e
c
t
e
d
K
e
y
s
=
s
e
l
e
c
t
o
r
.
s
e
l
e
c
t
e
d
K
e
y
s
(
)
;
I
t
e
r
a
t
o
r
<
S
e
l
e
c
t
i
o
n
K
e
y
>
i
t
e
r
a
t
o
r
=
s
e
l
e
c
t
e
d
K
e
y
s
.
i
t
e
r
a
t
o
r
(
)
;
w
h
i
l
e
(
i
t
e
r
a
t
o
r
.
h
a
s
N
e
x
t
(
)
)
{
f
i
n
a
l
S
e
l
e
c
t
i
o
n
K
e
y
k
e
y
=
i
t
e
r
a
t
o
r
.
n
e
x
t
(
)
;
i
f
(
k
e
y
.
i
s
A
c
c
e
p
t
a
b
l
e
(
)
)
{
a
c
c
e
p
t
(
s
e
l
e
c
t
o
r
,
s
e
r
v
e
r
S
o
c
k
e
t
)
;
}
e
l
s
e
i
f
(
k
e
y
.
i
s
R
e
a
d
a
b
l
e
(
)
)
{
r
e
a
d
A
n
d
A
n
s
w
e
r
(
b
u
f
f
e
r
,
k
e
y
)
;
}
e
l
s
e
{
t
h
r
o
w
n
e
w
R
u
n
t
i
m
e
E
x
c
e
p
t
i
o
n
(
"
U
n
s
u
p
p
o
r
t
e
d
o
p
e
r
a
t
i
o
n
"
)
;
}
i
t
e
r
a
t
o
r
.
r
e
m
o
v
e
(
)
;
}
}
}
c
a
t
c
h
(
I
O
E
x
c
e
p
t
i
o
n
e
)
{
e
.
p
r
i
n
t
S
t
a
c
k
T
r
a
c
e
(
)
;
}
}
p
r
i
v
a
t
e
s
t
a
t
i
c
v
o
i
d
a
c
c
e
p
t
(
f
i
n
a
l
S
e
l
e
c
t
o
r
s
e
l
e
c
t
o
r
,
f
i
n
a
l
S
e
r
v
e
r
S
o
c
k
e
t
C
h
a
n
n
e
l
s
e
r
v
e
r
S
o
c
k
e
t
)
t
h
r
o
w
s
I
O
E
x
c
e
p
t
i
o
n
{
S
o
c
k
e
t
C
h
a
n
n
e
l
c
l
i
e
n
t
=
s
e
r
v
e
r
S
o
c
k
e
t
.
a
c
c
e
p
t
(
)
;
J
a
v
a
中
的
I
/
O
5
c
l
i
e
n
t
.
c
o
n
f
i
g
u
r
e
B
l
o
c
k
i
n
g
(
f
a
l
s
e
)
;
c
l
i
e
n
t
.
r
e
g
i
s
t
e
r
(
s
e
l
e
c
t
o
r
,
S
e
l
e
c
t
i
o
n
K
e
y
.
O
P
_
R
E
A
D
)
;
}
p
r
i
v
a
t
e
s
t
a
t
i
c
v
o
i
d
r
e
a
d
A
n
d
A
n
s
w
e
r
(
f
i
n
a
l
B
y
t
e
B
u
f
f
e
r
b
u
f
f
e
r
,
f
i
n
a
l
S
e
l
e
c
t
i
o
n
K
e
y
k
e
y
)
t
h
r
o
w
s
I
O
E
x
c
e
p
t
i
o
n
{
f
i
n
a
l
S
o
c
k
e
t
C
h
a
n
n
e
l
c
l
i
e
n
t
=
(
S
o
c
k
e
t
C
h
a
n
n
e
l
)
k
e
y
.
c
h
a
n
n
e
l
(
)
;
c
l
i
e
n
t
.
r
e
a
d
(
b
u
f
f
e
r
)
;
b
u
f
f
e
r
.
f
l
i
p
(
)
;
S
t
r
i
n
g
s
=
S
t
a
n
d
a
r
d
C
h
a
r
s
e
t
s
.
U
T
F
_
8
.
d
e
c
o
d
e
(
b
u
f
f
e
r
)
.
t
o
S
t
r
i
n
g
(
)
;
S
y
s
t
e
m
.
o
u
t
.
p
r
i
n
t
l
n
(
"
-
>
"
+
s
)
;
b
u
f
f
e
r
.
c
l
e
a
r
(
)
;
}
}
A
s
y
n
c
h
r
o
n
o
u
s
I
/
O
支
持
,
具
体
有
这
些
类
:
A
s
y
n
c
h
r
o
n
o
u
s
F
i
l
e
C
h
a
n
n
e
l
用
于
文
件
异
步
读
写
;
A
s
y
n
c
h
r
o
n
o
u
s
S
o
c
k
e
t
C
h
a
n
n
e
l
客
户
端
异
步
;
A
s
y
n
c
h
r
o
n
o
u
s
S
e
r
v
e
r
S
o
c
k
e
t
C
h
a
n
n
e
l
服
务
器
异
步
。
但
性
能
上
可
能
并
没
有
太
大
的
提
升
(
平
台
)
,
以
致
于
中
移
除
了
对
的
支
持
:
淺
談
HTML view coming soon.
Download PDF
for the full formatted version.