Как рассчитать размер структуры?
Размер структуры sizeof(struct sockaddr_un)
.
Я не понимаю +1, который они добавили.Не могли бы вы дать объяснение?
Здесь код пытается определить длину данных , используемых (или используемых) в структуре.
offsetof(struct sockaddr_un, sun_path) + strlen(sun_path) + 1
offsetof(struct sockaddr_un, sun_path)
Это смещение, но не включая элемент .sun_path
.Это худший результат расчета данных потребностей предыдущих членов и предшествующего заполнения.
strlen(sun_path)
- длина строки без нулевого символа в .sun_path[]
.Если sun_path
не содержит нулевой символ , результат будет неопределенное поведение (UB).
+1
для предполагаемого нулевой символ в sun_path
.
Такой расчет полезен для отправки данных в struct sockaddr_un
где-нибудь как данные потребности могут быть значительно меньше, чем структура потребности.
Я бы предположил, что мы можем просто сделать strlen(sun_path)
+ sizeof(sun_family)
Это проблема (в зависимости от использования), поскольку
1) Не содержит нулевой символ .
2) Не учитываетдля потенциального заполнения между элементами .sun_family
и .sun_path
.Хотя в этом случае я был бы удивлен, увидев.