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

Unix编程相关接口

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
最小立异原则
7 E1 ?! b0 l( p/ w* y
2 i8 F9 Z" m3 o4 t* V: s; ^' J$ o; d5 Q
     如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成
6 r9 m4 S4 J: ^# Z8 v, f5 r$ l
     不能委派时,那就效仿
2 S* P2 a; v; T0 f+ k2 G2 Z! Y9 b

* ^: _# n, Q$ d/ q- j; v7 t$ {1 Z接口设计评估
0 u1 F  c/ v# m3 m) ]4 n7 p7 n0 T2 u, A/ H6 o7 Q  i$ {
  `( Z0 m) @# M" H( l
     简洁:          一个事务处理需要的动作时间及复杂度需要较低的上限. b/ |- |; c. u
     表现力:       接口可以触发相当广泛的行为
4 }3 |" p/ {! G" ^7 ?# v1 n     易用:          易用性同要求用户需要记忆的东西成反比, ~0 f4 m' t4 R" L& M
     透明:          用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆. C2 R. J* t! C" Y; ]! D5 O
     脚本化能力:很容易被其他程序调用
9 L1 _3 ~. e8 p4 I
5 f1 |* o9 U) z  d- c) U* }; e- b+ p' |
CLI和可视接口之间权衡; V% a& V1 o5 t- y6 {5 z' o4 D

9 z9 e, a* A" G
- m: i/ T" ~8 J! e     CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低
9 ^/ g8 N7 X* K1 _6 f1 N5 w0 j& m* L$ @3 L1 i. E( }

/ G! ^6 ^$ P! l# e" O     GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作  C: W) K3 J8 e8 @! R  j2 s
, x. W  ?! S8 C7 C" o8 G
) X6 Z2 z8 w3 @) l
     长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。' A& C+ N$ @8 p- x

6 F% I- q. d, @) \0 o4 A# J" x
! t8 l6 l2 c! Q" e1 iUnix接口设计模式) F" Y) A6 b' ]: t. E2 ?

) L& c6 O" K5 `5 t/ a* c4 g0 f( B3 u+ m/ Q& }, X, T
1. 过滤器模式5 l9 p: t7 c6 v
* q  k2 g' S. D& {: R  B9 A
2 X2 v! D- Z! I* g/ ^. H  A3 ]% `% S' K

: }  ?- y1 G( n, j5 F程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。
  l+ h& p+ w6 v2 Q- i$ X  F4 M  f  {. f( f' f1 M# E( D7 M5 O

  d+ S3 D& u% F! X" e实例:grep,tr! v' {4 n3 b3 `0 `% r% E: j
: K' Y: N4 x8 n. \9 w, _' Z
2 Y& ^0 Z8 Z9 e. C
原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。: B1 J, ^, {( z- b" d
) [2 [! }$ @0 _& S  A, P

  ]7 C; \* ~& {/ E% }# v, P$ V2. Cantrip模式
6 l# n& d- S( x& X$ b0 i) ~) |4 S
5 T( \$ S$ Q8 d( r
8 i2 g' _7 h$ m3 t; p: Q  L程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。
8 S% @" \2 c) i$ I4 S
0 F* ?8 N9 o' T1 n+ T& h8 e8 ]5 {3 E) Q( O0 n
实例:clear,touch
2 S5 x; l3 W4 u7 e: h
( j- v8 ?& \5 V0 a! L$ d
4 [5 |6 W) B) l* L* h7 E3. 源模式& H8 P. J+ L: p' A( ^1 R, `

  }, c" N% F; z
; o/ b) `8 K2 z  m- W程序不需要输入,输出由启动条件决定/ V7 V, k8 B8 ^! h& [
7 M/ ]* z/ t# e0 |8 ^2 X+ Q0 m

0 x% _' n1 S6 D  H. _. J' E实例:ls,ps,who
: X/ W; l& l0 \5 d3 N% \* G$ d& y) o/ i6 ]* d
5 v  K! R- {: ^; l3 L
4. 接收器模式
( t0 b% h. E" s
" K# @' {! H7 y4 m5 B" a5 N' X( b5 k0 r
程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。
- C9 C. s% ~3 W
; c. w: u! H, @7 i7 Q- F5 ?8 {4 o
; ]' A0 ]$ h' m实例:lpr0 d  x  c4 @/ h! R5 |. H: Y0 x

9 s) s$ Y1 d+ b+ T$ G) c; ^4 v9 E& U7 I7 }6 q( G
5. 编译器模式
( |1 d, M& z8 e% K% ], Y0 @% i! W" H& U
+ |0 F( I' c3 D
程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。3 Q* C, D$ P# T0 X% H7 y) D

# ^, d' J' c. i7 O. x5 u( N
  r. ^3 H+ }3 J6 z. N3 A0 D3 W实例:gcc,gif2png,gzip
4 u5 `: \+ h) `& G9 V5 [3 [0 I1 j" N' o! p

' R, ~4 w  {3 S2 H# _8 L; }6. ed模式
2 u/ L* Z8 Z& Q9 C# H' P% G$ T, n1 z/ D4 \# m0 t  w) R  x% c4 h

9 J* I0 i$ c. T* _程序具有很强的交互性。
6 r$ S* Z, e* }) ]1 s0 ^" ~7 h" L1 @! o/ Z* D& u9 C
6 ?7 z! e- V5 L8 t8 M
实例:gdb,ftp,sh$ G9 W3 m2 P( v6 @4 M  H& e/ ]6 a
0 P' x1 }5 H0 F% q" C; Z

  B% d1 h1 y8 f% Z# `' }7. Roguelike模式
3 X) ]7 V; l; b; L7 j3 t; W7 w/ I5 m$ z) ?- t- ?) G; j# q
6 _+ U; [" ]' A, k, ^  n$ _" b$ x
运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。8 H: q. C; i  s! [" C' \

4 v) |2 M& c, X# E  o" @( x+ B
6 S4 L3 S  @  S; a实例:vim,emacs1 B' T1 V# `* g# l8 G) @" O
# J+ H6 l1 \3 a* Q* Z
+ _3 ?. m% U0 f8 Z! j
8. 引擎和接口分离模式" X7 ~- y  I3 w+ J; i) K
: f) g" }8 |6 ~  k" h8 [$ N
  R8 [7 S" u4 Z+ ]: H& W3 ?2 v
模型、视图、控制器模式
- {% ?4 d; r7 i0 W$ \( ~2 _  B4 j/ K  A8 g6 \& z- l

) r. y- H4 v. i  t几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合1 L) ?! j( e1 B7 K. s5 ?# f

2 _2 `0 Y/ z6 o1 X: n
3 y) ~& ?" o  v+ K9. CLI服务器模式
# D1 w& S: x8 {2 I! J1 A' k8 h3 |. Q2 K' Z1 K' O2 s( i8 @: C  [
7 t5 W- o$ `* v4 ^8 @
程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。
8 c1 \$ N2 ?; ~/ X( d( b# ~8 M9 y6 h
# v# Y$ H) j) [. r4 q
实例:POP, IMAP, SMTP, HTTP+ g! j0 B$ T5 d$ \2 Q0 S7 S
+ T4 h" q. C" U

0 R4 u! ~! u9 W( f10. 基于语言的接口模式
- u  Q* G& A- l* z- Y) t8 [$ G% ~! Y; P1 P. n1 u- O6 S

0 L9 o3 n1 z$ g/ h# s8 bGUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。
9 K2 u7 I( C5 f6 Z+ V# _6 f4 g3 @, R9 F6 ?! C2 N
  p# z" L8 N% }
9 @+ a3 b, n9 N

6 G" {0 I- P$ n0 C网页浏览器作为通用前端
" D; C, ^5 M, \0 p
( B' m9 e3 w' k; f
8 c! d% l/ |* W( z9 s' O8 T( G* b! w: Y' E% v
2 Y3 t( O' ?4 j1 }, `
沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,* l% u. o/ F  ^; P) v
6 o0 Z; H% \! F) u. d
' ]5 B( i( ~3 K7 V6 X8 }
长时间的操作要提供进度条。" ~: `6 A; H# @0 S# @

) l( I  x$ ^; X& D+ F1 M+ F

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 18:54 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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