Состояние реализаций POSIX

#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] для генерации этого спецификатора преобразования.)