先看一下图片对比效果
原图
译文
这个示意图没有什么特别的, 表现的就是tty的软硬件的关系
因为原文中有多个类似的图, 想找一个与原文尽量接近的方式进行表达. 一开始想用PlantUML来实现, 发现受UML的局限,画一个双向箭头都很麻烦. PlantUML底层用的dot语言, 所以直接用Graphviz的dot语言更方便.
简单地学习了一下, 效果不错, 特分享给大家.
我用的是mac, 安装graphviz
$ brew install graphviz
安装一个Atom或Sublime Text的插件, 我最后用的是Atom里的Graphviz preview+, 用起来很方便, 可以做到实时重绘, 不用了解命令行参数了.截图如下:
最后放上上面插图的源码,供有兴趣的同学参考,回头我会把全部译文和源码放到github上.
digraph TTY{ edge [dir="both"] rankdir="LR"; subgraph cluster { //[ID="dd"]; label="硬件" color="#e3e3d1" style=filled fillcolor="#e3e3d1" 终端[shape=box3d]; 物理线路[shape=box3d]; UART[shape=box3d]; 终端 -> 物理线路 ->UART: 万能异部收发器; } subgraph cluster软件 { style=filled color="#e3e3d1" label="软件" fillcolor="#e3e3d1" UART->"UART\n驱动" ; subgraph cluster内核 { color="#000000" style="dashed" label="内核" "行\n规程" [comment="线路规程"]; "UART\n驱动" -> "行\n规程"; "行\n规程" -> "TTY\n驱动"; } 用户进程1 [label = "用户\n进程"] ; 用户进程2 [label = "用户\n进程"] ; 用户进程3 [label = "用户\n进程"] ; "TTY\n驱动" -> 用户进程1 ; "TTY\n驱动" -> 用户进程2; "TTY\n驱动" -> 用户进程3; } }