Как сигнализировать о конце входа stdin

Самое большое различие в моем использовании было то, что на Экране Гну можно только разделить кадры горизонтально, тогда как в Tmux можно разделить и горизонтально и вертикально. Это своего рода перемещает цель, хотя, поскольку я здесь говорю, что вертикальное разделение делает, это - путь в экран.

Другой затем, что, вещи о плоском.

84
30.06.2016, 03:08
3 ответа

Ctrl+D при вводе в начале строки на терминале показывает конец входа. Это не сигнал в смысле Unix: когда приложение читает из терминала, и пользователь нажимает Ctrl+D, приложение уведомляется, что конец файла был достигнут (точно так же, как, если это читало из файла и передало последний байт).

Ctrl+C действительно отправляет сигнал, SIGINT. По умолчанию SIGINT (сигнал прерывания) уничтожает приоритетное приложение, но приложение может поймать сигнал и реагировать некоторым другим способом (например, сама оболочка ловит сигнал и прерывает строку, которую Вы начали вводить, но это не выходит, это показывает новую подсказку и ожидает новой командной строки).

Можно изменить символы, связанные с концом файла и SIGINT с stty команда, например. stty eof a сделал бы a символ конца файла, и stty intr ^- отключил бы символ SIGINT. Это редко полезно.

118
27.01.2020, 19:30
  • 1
    Спасибо! ДелаетCtrl+D имейте в виду Ctrl и капитал D, или он не имеет значения? –  StackExchange for All 09.07.2011, 19:31
  • 2
    @Tim: это - нижний регистр, Вы хотите... конвенцию записи, что команды клавиатуры с прописными буквами прибывают, потому что маркировки на клавиатуре всегда находятся в прописных буквах, и описываемой вещью является СОЧЕТАНИЕ КЛАВИШ не фактический код символа, который видит программа. Да это иногда сбивает с толку. –  Caleb 09.07.2011, 19:32
  • 3
    @Caleb:Спасибо! как каждый должен указать, что ключ находится в капитале? Или есть ли когда-нибудь такой случай? –  StackExchange for All 09.07.2011, 19:37
  • 4
    @Tim На терминале, сочетаниях клавиш Ctrl+Shift+D и Ctrl+D отправьте тот же символ так или иначе (число символов 4, обычно называемый Ctrl+D). –  Gilles 'SO- stop being evil' 09.07.2011, 19:41
  • 5
    @Tim терминал получило Ctrl+D. Это не отправляет символ в программу. То, что происходит, - то, что, когда чтения программы от терминала, терминал говорит это, “это - конец файла”, то же как тогда, когда программа пытается читать после конца дискового файла. Оболочка не включена вообще. –  Gilles 'SO- stop being evil' 03.03.2016, 19:02

Ваша вторая точка смешивает две совершенно других вещи.

  • Ctrl+C отправляет сигнал уничтожения в рабочий процесс.
  • Ctrl+D отправляет символ End of Transmission.

Вы ищете последнего.

23
27.01.2020, 19:30
  • 1
    Потенциал для беспорядка здесь: с точки зрения приложения ни за каким любым фактическим символом не посылают ^D. Что означает, что приложение не получает тот символ из read(2) syscall. –  ulidtko 22.01.2013, 19:59

Я столкнулся с этим при поиске другой информации. Предоставленные ответы верны, но я думаю, что они слишком связаны с внутренней работой.

Простой, не -технический ответ состоит в том, что Ctrl + D завершает файл STDIN и что Ctrl + C завершает активное приложение.

Оба варианта обрабатываются драйвером клавиатуры и применяются ко всем программам, считывающим данные с клавиатуры.

Чтобы увидеть разницу, запустите оболочку командной строки и введите команду wcбез аргументов. Теперь он ожидает ввода STDIN. Введите предложение и "вернуться". Теперь введите Ctrl + D и wcзавершат и дадут вам количество строк, слов и символов.

Сделайте то же самое, но введите Ctrl + C . wc завершится без вывода.

1
18.08.2021, 16:07

Теги

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