在 macOS 上,/dev/tty.* 和 /dev/cu.* 有什么区别?

114

每个串行设备都会在 /dev 中出现两次,一次作为 tty.*,另一次作为 cu.*

cu.* 设备是什么?它和 tty.* 设备有什么不同?

ls -l /dev/*.usbmodem621

输出:

crw-rw-rw-  1 root  wheel   11,   5 Dec 25 18:00 /dev/cu.usbmodem621
crw-rw-rw-  1 root  wheel   11,   4 Dec 25 18:00 /dev/tty.usbmodem621
1个回答

128

http://lists.berlios.de/pipermail/gpsd-dev/2005-April/001288.html :

这个想法是在共享来电和去电通话的线路时为软件添加补充。 用于接收流量的呼入设备(通常为 /dev/tty*)提供。 任何试图打开它的过程都会在 open() 调用内部阻止,只要硬件未断开 DCD 连接(即只要调制解调器没有载波)。 在此期间,呼出设备(通常为 /dev/cu* -- cu 代表“呼叫单元”)可以自由使用。 打开 /dev/cu* 不需要断开 DCD 连接并立即成功。 一旦成功,对呼入设备上的阻塞 open() 将被暂停,并且甚至在 DCD 上升时也无法完成,直到 cu 设备再次关闭。

这样,您可以在 /dev/tty* 上侦听 getty,并且仍然可以不受限制地使用 /dev/cu*。


1
我能够通过tty发送东西。为什么会这样? - JobHunter69
1
无论以何种顺序打开两个端口,都不可能打开第二个端口,第二次打开会导致资源繁忙[Errno 16]。我先尝试了Python的pyserial库,然后在C中使用了O_RDONLY和O_WRONLY分别打开tty.*和cu.*。唯一的区别是,在/dev/cu.上运行cat命令将立即返回,而在/dev/tty上运行cat命令将阻塞。从编程角度来看,我不认为在处理串行设备时可以从中获得任何优势。 - Stephane Gasparini
3
想知道DCD是什么吗? - Weihang Jian
1
链接已经失效。它会重定向到一个德语页面,https://www.berlios.de/software/gpsd/(“gpsd是一个服务守护进程,用于监视一个或多个GPS或AIS接收器...”)。它与原始内容无关(仅涉及GPSd)。 - Peter Mortensen
1
@WeihangJian 数据载波检测,通常简称为载波检测。传统上,调制解调器使用它来指示已经与远程方建立通信。像“getty”这样的程序会监听它,并在看到它时传输登录提示。 - p10ben
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接