找回密码
 注册
关于网站域名变更的通知
查看: 274|回复: 1
打印 上一主题 下一主题

Unix编程相关接口

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-1-16 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
最小立异原则
& Z/ v: o! m* H( [6 l+ v8 W) t4 B% a5 C) X# S' z& z; Z2 S
7 \1 w6 n* j! Q
     如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成
. r& z5 t7 ]9 D% S: }
     不能委派时,那就效仿
7 o7 e! b$ c$ \2 T
1 n: @) I/ V* `3 `0 d( Y
接口设计评估( W( ?9 W- s  y2 Q
5 [5 Z. h" H8 L

/ c' V- f8 o, a     简洁:          一个事务处理需要的动作时间及复杂度需要较低的上限
. Z  t- x' G* `3 e8 U2 O7 P( I* p1 O     表现力:       接口可以触发相当广泛的行为4 E7 w0 ^( `5 {1 ]5 I
     易用:          易用性同要求用户需要记忆的东西成反比
2 k) G$ ^9 b5 V. k) ]     透明:          用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆
4 l/ h2 P7 F2 u: ?4 r0 l     脚本化能力:很容易被其他程序调用5 I  J' Q1 o" \5 B" A# m1 K
; v2 _  A7 _/ {/ W
6 a/ z: m5 W+ L; O/ g) `% g+ A+ _
CLI和可视接口之间权衡
3 s8 O% F6 I2 M
/ F+ C# v' u- s+ J: ?
; g5 ~0 Q/ F- y: F     CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低
& U9 S1 n& u, d
! O% U2 w, V2 ^6 D& O3 C1 c0 x! Q1 A  b2 c# I5 a8 D% i$ y
     GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作9 L/ B9 X" ~& [# r1 z
' t8 h/ V3 g9 f5 {9 X! g; _

0 ^, ]& s2 C7 {* C' D4 l, w     长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。0 O" W! \2 c& j# e* N

! G9 E" i! p5 n* f! A. H7 P6 L& w! q, X( W. g
Unix接口设计模式
& @( t- A2 B/ G5 P, l" M7 ?2 ~9 U7 @9 k; f4 Y/ D6 p! u
5 B; ^' p2 G5 H3 U
1. 过滤器模式- u# Q! {( w. T+ U
6 t; w9 K/ C* t6 t" d

" F! L* S8 g1 p' S* Y  C% d" m8 l3 o
程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。" j0 P$ z( s$ S! t" q2 ?1 K# j
' ^5 I! ~  X8 T( o. r& }8 v3 u1 G
1 u6 t% n1 P1 I  F, \
实例:grep,tr
$ `" ~& l$ ]9 @$ F2 k0 V( V/ _
6 y& D0 q  @/ O9 n* p; v+ I- L+ i+ _2 ~/ j
原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。3 m$ O' X/ }% `+ S
  u# n5 f- Y5 j# N. w
0 t$ `( l) N% j* f) Y( t
2. Cantrip模式
8 `$ b; ]! p* D; d8 ]. |3 d7 E4 Z5 M

& `+ M, v3 ^+ `/ {+ `程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。
8 V3 k* ?* e5 M& i# Q7 a& U
6 L( Z: y5 D- n1 N5 f
6 @- }2 q) G: X1 x实例:clear,touch
# a  r# w$ T- S9 U* o8 C2 _* X/ E+ H. C& }6 }% f8 b4 l
2 B' v2 ^8 G' M: ?' |0 j8 r( k% }
3. 源模式  Q8 k+ D/ f/ G' T: X$ J
2 U9 e$ q2 a, t# j% G
, P" B+ w# d- N4 r0 C! U* z1 Z
程序不需要输入,输出由启动条件决定
$ @6 V/ ?1 R! v
0 g; F$ }. {- {3 Y9 l( A- x8 o0 S" C) i2 i. L! M, x
实例:ls,ps,who
. Y" B# h* K% Z8 r1 C7 h3 ~8 g, ^; u$ T7 F% E! W# _9 {

/ {2 Q" @7 G6 _2 W( w. p4. 接收器模式2 z, a& s. u8 n. ]) I
9 z8 v- s# h: i- c9 u

" H1 l! D7 Q/ A8 c7 Y程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。
5 U2 G: `7 }; q% _: F  |  i" m, i, D( F) _8 ~

  ?: Y8 B0 F! _) y3 M8 o实例:lpr
$ w) W# X  m. b! \! h5 O* ]2 \0 H3 G" q  E$ S8 b

; ]0 C, {6 e* r$ D; Z6 Z$ A8 Z5. 编译器模式
9 k3 q! a% u2 ?5 a
7 Y+ p. r, k# N* c8 }* T+ _+ A2 D) Y4 ~6 Q7 v8 V8 @; f
程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。
3 w; q6 Q- L6 V9 m0 M! t; X1 |' Z1 }4 m! {
" Z5 A# P+ h0 D& Q* N
实例:gcc,gif2png,gzip4 h% G- s5 i5 A& D# C" x

% u# f/ ~3 f# k. Q# S' b# c# T: o, b8 r3 w; o% [2 B
6. ed模式
& ^- s/ i% p% h3 J( n* x2 r# o. G# x7 [* t6 M5 Z
! P# y5 K5 X9 C; l: s
程序具有很强的交互性。
! ^' q& L9 h' ~" C  E: Z3 ?4 X" C6 j& u& l
0 r3 g  I  {2 f6 L! e+ F4 i
实例:gdb,ftp,sh. e6 J! }$ f2 a; o, i2 ~

- P- {7 @* R# h8 {* G& ~( x! w( k1 |4 a( W5 H' c/ c4 Y1 f( g
7. Roguelike模式
6 K" E9 h* }* {- o6 Y. S7 t# ]4 s
  O, \/ R8 m: B0 G6 h2 U* Y
运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。: m1 P  G& Y; O

6 }3 W2 M/ ?. h9 c# C
" ?/ q; H# C. N7 u实例:vim,emacs
0 {0 @0 [7 X& C# N6 b
8 G; {' d. x1 W# V8 W7 }% ]" d
; E6 L7 Z& S( m; i* Q. o2 o8. 引擎和接口分离模式
  t% V+ k+ m% a# Q
6 x; E1 u: p2 x# w
$ T0 H& a5 I4 Z, v模型、视图、控制器模式( O8 @" a3 G' ?  L, [
; x5 V6 A0 A1 K$ O

: `1 |; e2 f8 D! ?( m. ~) I, g0 K几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合
" ]% R7 \5 h4 K' Q* f) L+ O6 W2 f9 j
- E9 G/ S" B0 Y
9. CLI服务器模式
; H' e5 i$ T4 r! Z- O) s: I: R) b) S& i3 R

% l9 q- t" n! q( A$ ]  A' i7 u程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。8 [1 l$ G& {1 o/ S

6 ~9 ?3 g) ]8 G8 T8 U( B
+ r8 Z0 w) u7 ^实例:POP, IMAP, SMTP, HTTP
. G' D6 F) o3 V1 M2 q6 K( A* D: ?5 Y/ W+ _9 k

0 }. \' ~+ K6 K0 k9 g3 Y9 x10. 基于语言的接口模式
$ e: {9 l+ \% Q9 V' s" y5 Q, s: n8 Y5 F. D
' C6 m( j, l0 R$ @# d
GUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。
8 U) _* t/ h- l/ n  z8 i4 e8 H) H, S4 n& g% F
1 W0 K$ G2 |  o$ W. x+ Z3 A

( x) k2 W' s# q; K6 |: I7 w; E! L
7 C4 e  n" x: X" P( [2 J% A网页浏览器作为通用前端6 P8 |" |! k! S' k) c
# S4 t- B$ G" Y4 m3 \! }9 y. Y
9 v4 s8 Y$ O: }
$ F$ P: U9 Z  Z& \  r. O6 B

8 ^/ C( G, N8 u- E/ O  q沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,! [+ j! B6 P0 x1 M+ C
; D8 u) s8 V$ o; Y0 `6 Z2 Z

, g5 Z5 T) N  O( N长时间的操作要提供进度条。
# P9 {) z# W% w: U$ r2 `
) B3 w  k' z) g* H- U* n! r

该用户从未签到

2#
发表于 2020-1-16 19:40 | 只看该作者
Unix编程相关接口
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 14:07 , Processed in 0.218750 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表