Использование потока C FILE в программировании сокетов C - PullRequest
1 голос
/ 14 декабря 2010

Вернулся с вопросом об использовании C File stream в программировании сокетов. Я читал об этом и видел смешанные отзывы - некоторые люди говорят, что это ненадежно (то есть негерметичная абстракция?).

Кто-нибудь получил представление об использовании потока файлов C в программировании сокетов?

Ответы [ 2 ]

5 голосов
/ 14 декабря 2010

Да. Не.

Протоколы TCP и UDP имеют слишком много семантики, чтобы их можно было легко сопоставить с вашими обычными API файлового потока. Это не значит, что это невозможно или даже сложно, но, вероятно, будет много и много ошибок и крайних случаев, которые дадут вам дико непредсказуемое поведение. Я также не могу не думать ни о каких приложениях, где вы можете рассматривать сокет как обычный файл.

В конце концов, как только вы разберетесь с привязкой, прослушиванием и принятием, ни один из которых вы не можете сделать с потоками файлов C, и оберните описатель результирующего файла в тип потока файлов, все, что вы собираетесь сделать do это использовать fread () и fwrite (), возможно fgetc (), так что вы можете оставить его как обычный файловый дескриптор, а также использовать recv () и send () и избавить себя от необходимости переноса. Вы можете избавить себя от хлопот, связанных с буферизацией, но имея контроль над буферизацией, вы можете настроить свой буфер в соответствии с требованиями приложения и сэкономить некоторые сетевые издержки и скорость.

0 голосов
/ 14 декабря 2010

Это зависит от типа приложения, которое вы пишете.Потоки FILE не подходят для неблокирующих, асинхронных или select / poll операций ввода-вывода.Это может не быть проблемой для программы командной строки, которая выполняет последовательную задачу подключения к серверу, выполнения некоторого запроса и получения результатов.Он также хорошо работает для серверного процесса, запускаемого только из inetd.Но если ваше приложение будет делать что-то на основе событий, у вас проблемы.Если вы действительно хотите использовать FILE потоки с сокетами в приложении, основанном на событиях, вы можете сделать это возможным с помощью потоков, но я сомневаюсь, что это хорошая идея ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...