MacOS: qual é a diferença entre /dev/tty.* e /dev/cu.*?

89

Cada dispositivo serial aparece duas vezes no /dev, uma como um tty.*e uma vez como um cu.*.

Qual é o cu.*dispositivo? Como ele difere do tty.*dispositivo?

mh@maru ~ --> 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
Mark Harrison
fonte

Respostas:

99

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

A ideia é complementar o software ao compartilhar uma linha entre as chamadas de entrada e de saída. O dispositivo de chamada (normalmente / dev / tty *) é usado para o tráfego de entrada. Qualquer processo que tente abri-lo é bloqueado na chamada open (), desde que o DCD não seja confirmado pelo hardware (ou seja, desde que o modem não tenha uma portadora). Durante isso, o dispositivo de chamada (normalmente / dev / cu * - cu significa "unidade de chamada") pode ser usado livremente. Abrir / dev / cu * não requer que o DCD seja declarado e é bem-sucedido imediatamente. Uma vez bem-sucedido, o bloqueio de abertura () no dispositivo de chamada será suspenso e não poderá ser concluído quando o DCD for acionado, até que o dispositivo cu seja fechado novamente.

Dessa forma, você pode ter um getty ouvindo em / dev / tty *, e ainda pode usar / dev / cu * sem restrições.

Tom van der Woerdt
fonte
Obrigado Tom, isso é exatamente o que eu precisava saber.
Mark Harrison
Correto, um caso em que este assunto é se você deseja usar (em Unix e amigos) 'cat' para capturar dados da porta serial para um arquivo como 'cat /dev/cu.xxxx> file.txt' que não funciona com tty. ' por causa do bloqueio. Pelo menos não em MacOs.
nyholku
Consegui enviar coisas por meio do tty. Por que é que?
StackOverflowOfficial
@MarkHarrison e Tom: então, na maioria dos casos, se estou escrevendo um programa não sofisticado para se comunicar com uma porta serial, presumo que devo usar o dispositivo / dev / tty *, correto?
ptdecker