Странное поведение управления-d

Возможно, это не установлено? Откройте свой диспетчер пакетов и установите sudo пакет.

9
21.08.2011, 06:10
2 ответа

Да. Это имеет отношение ^D действительно делает: это просто останавливает ток read(2) звонить.

Если программа делает int rdbytes = read(fd, buffer, sizeof buffer); и Вы нажимаете ^D промежуток, read() возвраты с в настоящее время байтами чтения в буфере, возвращая их число. То же происходит на линейном окончании; \n в конце всегда поставляется.

Таким образом, только a ^D в начале строки или за другим ^D имеет желаемый эффект наличия read() вернуть 0, сигнализация EOF.

13
27.01.2020, 20:04
  • 1
    Это зависит от того, чем Вы определяете строку, чтобы быть (с или без запаздывания \n.. но возможно просто нажать ^D дважды по очереди, и причина условие EOF, не генерируя заключительный символ новой строки (как нажатие Enter перед ^Dсделал бы). –  Peter.O 21.08.2011, 10:03
  • 2
    Ваш являются правильными, я забыл упоминать что: Запустите строки, и "просто нажатые ^D" являются двумя ситуациями, где буфер пуст, таким образом, ^D будет иметь read() вернуть 0, указание EOF. –  glglgl 21.08.2011, 13:01

Да, это - нормальное поведение. Единственное Управление-D обычно только вспыхивает, если это - начало строки. Это выходит с одним Управлением-D:

$ cat > foo.txt
bar
baz
^D
11
27.01.2020, 20:04
  • 1
    Управление-D дважды в конце строки действительно вспыхивает без запаздывающего символа новой строки... –  Peter.O 21.08.2011, 10:57
  • 2
    Да, Вы правы. Я не означал подразумевать иначе. Я отредактировал свой ответ для разъяснения. –  Klox 21.08.2011, 19:14

Теги

Похожие вопросы