Почему «кот» иногда пропускает байты при чтении с другого терминала, а функция сканирования golang — нет?Linux

Anonymous
Почему «кот» иногда пропускает байты при чтении с другого терминала, а функция сканирования golang — нет?

Сообщение Anonymous »

Один вопрос касался pty-s (терминалы Linux Ubuntu; псевдотерминалы) и способа чтения (cat) golang из них.
Сначала я сделал следующее. p>
  • откройте два терминала (

    Код: Выделить всё

    dev/pts/0
    - 0 и dev/pts/1 - 1)
  • затем я набираю во втором терминале "cat dev/pts/0" (так что все, что написано на первый терминал будет отображаться на втором)
  • начинаем писать в первом терминале (TUI)
Это обычно работает большую часть времени, но некоторые символы время от времени пропускаются время.
Точнее, для тех символов, которые не отображаются во втором терминале, у меня есть эхо, а для тех, что отображаются, нет. Это как если бы echo и cat конкурировали за символы.
Однако, когда я работаю с функциями сканирования golang и fmt, всякий раз, когда я пишу что-то в терминал (и, следовательно, в /dev /pts/0) функция сканирования считывает из него все (без пропущенных байтов) + введенный контент отображается в TUI (в этом случае работает «эхо»).

Код: Выделить всё

package main

import "fmt"

func main() {
var input string

fmt.Println("Enter text:")

for {
fmt.Scanln(&input)
fmt.Println("You wrote:", input)
}
}
Таким образом, в данном случае похоже, что «конкуренции» между echo и golang не существует...
Я ожидаю такого же поведения в обоих случаях. В частности, читать все байты в обоих случаях и иметь (или не иметь) эхо в обоих случаях.
В чем разница? Почему «cat» иногда пропускает байты при чтении с другого терминала, а функция сканирования golang — нет? Я думал, что golang просто читает из «dev/pts/0» так же, как это делает «cat». и просто выдает результат.

Подробнее здесь: https://stackoverflow.com/questions/793 ... al-but-the

Вернуться в «Linux»