Слои абстракции потока ввода / вывода для простого C - PullRequest
1 голос
/ 20 июня 2010

Существуют ли какие-либо широко используемые уровни абстракции потока ввода / вывода для простого C?

Под слоем абстракции потока ввода / вывода я имею в виду любой уровень, который по крайней мере позволяет создавать пользовательские функции чтения / записи.Для C ++ есть стандарт iostream и boost :: iostreams.Для пользователей glibc есть возможность использовать пользовательские потоки.Это не принесет пользы, если требуется написать переносимый код на Си.

Лучше использовать библиотеку, которая либо широко используется, либо ее легко встроить в исходный код, либо и то и другое.

SDL_RWops - недокументированная, но широко используемая функция SDL, и zziplib может использовать ее.Однако не имеет особого смысла добавлять зависимость к SDL только для того, чтобы получить эту функцию.

GLib содержит абстракцию GIOChannel, но библиотека снова довольно велика, и они говорят, что «поддержка Windows только частичноcomplete ".

Однако вышесказанное не совсем удовлетворительно для небольших библиотек, таких как декодеры, устройства чтения форматов файлов и процессоры обработки сигналов: они содержат множество ненужных вещей, а лицензирование LGPL предотвращает встраивание соответствующих частей в неКод GPL.

Ответы [ 3 ]

3 голосов
/ 20 июня 2010

Абстракция BIO в OpenSSL звучит так, как будто она отвечает всем требованиям.

2 голосов
/ 20 июня 2010

Я думаю, что вы ответили на свой вопрос.

Нет, широко не используются библиотеки абстракции steam. Те, что существуют, обычно представляют собой небольшую часть библиотек, от которых большинство людей не хотят зависеть, или они очень специализированы.

Каковы ваши требования? Что вы ищете из библиотеки абстракций? Я должен признать, что каждый раз, когда я смотрю на один или начинаю писать, я обычно возвращаюсь к стандартным интерфейсам POSIX ... какую еще абстракцию можно пожелать?

1 голос
/ 20 июня 2010

Существует библиотека libslack (GNU GPL), которая может предоставить некоторые функции, которые вам нужны, и эта оболочка входного потока, лицензированная MIT:

...