Какие системные вызовы) использует printf () для записи данных на консоль в Windows?

Просто поделитесь решением Ли с вопросами и проблемами комментариев, где это возможно:

public static T Clamped(this T value, T min, T max) where T : IComparable {
    if (value == null) throw new ArgumentNullException(nameof(value), "is null.");
    if (min == null) throw new ArgumentNullException(nameof(min), "is null.");
    if (max == null) throw new ArgumentNullException(nameof(max), "is null.");
    //If min <= max, clamp
    if (min.CompareTo(max) <= 0) return value.CompareTo(min) < 0 ? min : value.CompareTo(max) > 0 ? max : value;
    //If min > max, clamp on swapped min and max
    return value.CompareTo(max) < 0 ? max : value.CompareTo(min) > 0 ? min : value;
}

Различия:

  • Имя метода использует соответствующее время глагола (ed), чтобы (далее) указать, что значение не зажато на месте, и вместо этого возвращается новое значение (см. Комментарий @ JimBalter ).
  • Соответствует null check для всех входов (см. @ комментарий JeppeStigNielsen ).
  • Свопы min и max, если min > max (См. @ комментарий JeppeStigNielsen ).

Ограничения: Без односторонних зажимов. Если max - NaN, всегда возвращается NaN (см. комментарий Германа ).

0
задан J. Dumbass 17 January 2019 в 02:37
поделиться

2 ответа

Как ответил Здан, printf не пишет напрямую в консоль, а записывает в стандартный поток вывода с помощью WriteFile Windows API, который, в свою очередь, вызывает [112 ] системный вызов. Затем выходные данные выбираются хостом консоли conhost.exe и отображаются на консоли Windows.

0
ответ дан iBug 17 January 2019 в 02:37
поделиться

printf не записывает данные напрямую в консоль, а записывает данные в выходной поток. Это консольный хост (conhost.exe), который берет данные из выходного потока и записывает их в консоль.

Существует весь API для доступа к консоли. Например, функция WriteConsole .

0
ответ дан zdan 17 January 2019 в 02:37
поделиться
Другие вопросы по тегам:

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