Клиент-серверная программа и mode_t

#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 , поэтому вывести его в виде целого числа даже недостаточно; вам нужно перебрать все флаги режима и проверить каждый.