#c #linux #client-server #mode
#c #linux #клиент-сервер #режим
Вопрос:
Мне нужно отправить переменную типа mode_t через сокет. Как мне это сделать? Я имею в виду, что я мог бы преобразовать это в строку, используя snprintf () .. но нормально ли это?
Спасибо
Ответ №1:
mode_t
является целым числом.
Действительно, наличие текстовых протоколов на сокетах практически полезно (легче отлаживать и развиваться).
Ответ №2:
Конечно, использовать строки нормально. Но вы можете проверить такие функции, как htobe32
и be32toh
, из заголовка <endian.h>
, если хотите отправить его в виде целых чисел.
Комментарии:
1. Это уродливые нестандартные имена для функций
htonl
иntohl
… Кроме того, кто сказал,mode_t
что он должен умещаться в 32 бита или даже что он имеет одинаковые шаблоны битов на обоих концах сокета?2. @R .. Да, но у него есть 64-разрядные варианты, даже если в данном случае это не требуется.
Ответ №3:
Для mode_t
безопасной передачи вы должны преобразовать ее в какую-либо альтернативную форму. Нет оснований полагать, что два взаимодействующих хоста будут использовать одни и те же определения флага для mode_t
, поэтому вывести его в виде целого числа даже недостаточно; вам нужно перебрать все флаги режима и проверить каждый.