#c #posix
#c #posix
Вопрос:
Я только что узнал, что getline()
функция, которая изначально была расширением GNU, теперь является частью стандарта POSIX 2008.
Есть ли какой-нибудь обзор того, насколько широко поддерживается эта версия POSIX?
Комментарии:
1. 1 за то, что нашел время задать вопрос о переносимости
Ответ №1:
Я бы просто продолжил и использовал это. Его можно реализовать getline
(но не более мощный getdelim
) как очень быструю / эффективную оболочку fgets
, поэтому, если вы готовы сделать это в качестве запасного варианта, использование getline
на самом деле не делает вашу программу менее переносимой. (По сравнению с чем-то вроде using __fpending
, которое не может быть реализовано переносимо и требует специфичного для реализации взлома для эмуляции.)
Также, конечно, оба getline
и getdelim
могут быть просто реализованы поверх flockfile
/ funlockfile
и fgetc
. Это не очень эффективно, но будет работать где угодно.
Комментарии:
1.
getdelim
иgetline
также может быть реализован поверхfscanf
с помощью0[^x]
спецификатора преобразования, гдеx
заменяется символом-разделителем, на котором вы хотите остановиться, и 200 — объемом имеющегося у вас буферного пространства. (Вы можете использоватьsnprintf
with%%%zu[^%c]
для генерации этого спецификатора преобразования.)