Почему inet_ntoa разработан, чтобы быть неповторно используемой функцией?

Я верю просто табличному содержанию. Например, если Вы распечатали таблицу базы данных или подобные электронной таблице данные к HTML.

7
задан Jichao 10 November 2009 в 06:02
поделиться

1 ответ

Причина, по которой он не использует кучу, - это соответствие стандартам (POSIX) и другим системам. Интерфейс не такой, что вы должны освобождать возвращаемый буфер. Он предполагает статическое хранилище ..

Но, объявляя его как локальный поток (с __ thread ), два потока не конфликтуют друг с другом, если они оба вызывают функцию. Это обходной путь glibc для неисправности интерфейса.

Это правда, что это не реентерабельность и не соответствует духу этого термина. Если у вас есть рекурсивная функция, которая ее вызывает, вы не можете рассчитывать на то, что буфер будет одинаковым между вызовами. Но его можно использовать в нескольких потоках, что часто бывает достаточно.

РЕДАКТИРОВАТЬ: Кстати, я только что вспомнил, есть более новая версия этой функции, которая использует буфер, предоставляемый вызывающей стороной. См. inet_ntop () .

17
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

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