Date: Sun, 15 Mar 2026 11:17:19 +0000 From: Vladlen Popolitov <vladlen@FreeBSD.org> To: doc-committers@FreeBSD.org, dev-commits-doc-all@FreeBSD.org Subject: git: 8ce37e50a2 - main - update translation of books/developers-handbook to Russian Message-ID: <69b6953f.24de6.c5f073b@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by vladlen: URL: https://cgit.FreeBSD.org/doc/commit/?id=8ce37e50a2190f9346681166a2deb7be6dfc2ca2 commit 8ce37e50a2190f9346681166a2deb7be6dfc2ca2 Author: Vladlen Popolitov <vladlen@FreeBSD.org> AuthorDate: 2026-03-15 11:17:08 +0000 Commit: Vladlen Popolitov <vladlen@FreeBSD.org> CommitDate: 2026-03-15 11:17:08 +0000 update translation of books/developers-handbook to Russian Reviewed by: andy, marck Differential Revision: https://reviews.freebsd.org/D55582 --- .../content/ru/books/developers-handbook/book.po | 2 +- .../developers-handbook/introduction/_index.po | 4 +- .../ru/books/developers-handbook/ipv6/_index.adoc | 22 +-- .../ru/books/developers-handbook/ipv6/_index.po | 49 +++---- .../developers-handbook/kerneldebug/_index.adoc | 4 +- .../developers-handbook/kerneldebug/_index.po | 8 +- .../ru/books/developers-handbook/l10n/_index.adoc | 2 +- .../ru/books/developers-handbook/l10n/_index.po | 4 +- .../books/developers-handbook/policies/_index.adoc | 10 +- .../books/developers-handbook/policies/_index.po | 28 ++-- .../books/developers-handbook/secure/_index.adoc | 6 +- .../ru/books/developers-handbook/secure/_index.po | 10 +- .../books/developers-handbook/sockets/_index.adoc | 28 ++-- .../ru/books/developers-handbook/sockets/_index.po | 155 ++++++++++----------- .../books/developers-handbook/testing/_index.adoc | 12 +- .../ru/books/developers-handbook/testing/_index.po | 20 +-- .../ru/books/developers-handbook/tools/_index.adoc | 4 +- .../ru/books/developers-handbook/tools/_index.po | 8 +- .../ru/books/developers-handbook/x86/_index.adoc | 48 +++---- .../ru/books/developers-handbook/x86/_index.po | 60 ++++---- 20 files changed, 243 insertions(+), 241 deletions(-) diff --git a/documentation/content/ru/books/developers-handbook/book.po b/documentation/content/ru/books/developers-handbook/book.po index d5d0352aa0..6533599fae 100644 --- a/documentation/content/ru/books/developers-handbook/book.po +++ b/documentation/content/ru/books/developers-handbook/book.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" -"POT-Creation-Date: 2025-11-12 21:00+0300\n" +"POT-Creation-Date: 2026-03-15 14:15+0300\n" "PO-Revision-Date: 2025-07-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" diff --git a/documentation/content/ru/books/developers-handbook/introduction/_index.po b/documentation/content/ru/books/developers-handbook/introduction/_index.po index 56512b6e95..96e8a498f7 100644 --- a/documentation/content/ru/books/developers-handbook/introduction/_index.po +++ b/documentation/content/ru/books/developers-handbook/introduction/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025. +# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2025-07-06 04:45+0000\n" +"PO-Revision-Date: 2026-03-08 09:11+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" "documentation/booksdevelopers-handbookintroduction_index/ru/>\n" diff --git a/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc b/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc index 5468e448af..1a3c0a81bc 100644 --- a/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc +++ b/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc @@ -76,7 +76,7 @@ endif::[] ** IPv4-совместимый адрес не поддерживается. ** автоматическое туннелирование (описано в разделе 4.3 данного RFC) не поддерживается. -** man:gif[4] интерфейс реализует IPv[46]-поверх-IPv[46] туннель в общем виде и включает "настроенный туннель", описанный в спецификации. Подробности см. в crossref:ipv6[gif,Универсальный Туннельный Интерфейс] этого документа. +** Интерфейс man:gif[4] реализует IPv[46]-поверх-IPv[46] туннель в общем виде и включает "настроенный туннель", описанный в спецификации. За подробностями обратитесь к разделу crossref:ipv6[gif,Универсальный туннельный интерфейс] этого документа. * RFC1981: Path MTU Discovery for IPv6 * RFC2080: RIPng for IPv6 @@ -142,8 +142,8 @@ endif::[] * RFC2710: Multicast Listener Discovery for IPv6 * RFC2711: IPv6 router alert option * [.filename]#draft-ietf-ipngwg-router-renum-08#: Перенумерация маршрутизаторов для IPv6 -* [.filename]#draft-ietf-ipngwg-icmp-namelookups-02#: Поиск имен через ICMP в IPv6 -* [.filename]#draft-ietf-ipngwg-icmp-name-lookups-03#: Поиск имен IPv6 через ICMP +* [.filename]#draft-ietf-ipngwg-icmp-namelookups-02#: Поиск имён через ICMP в IPv6 +* [.filename]#draft-ietf-ipngwg-icmp-name-lookups-03#: Поиск имён IPv6 через ICMP * [.filename]#draft-ietf-pim-ipv6-01.txt#: PIM for IPv6 ** man:pim6dd[8] реализует плотный режим. man:pim6sd[8] реализует разреженный режим. @@ -261,7 +261,7 @@ fe80:2::%ep0/64 link#2 UC ep0 См. раздел crossref:ipv6[neighbor-discovery,Функция "Обнаружение соседей"] в этом документе для информации о взаимосвязи между DAD и автонастройкой. [[gif]] -==== Универсальный Туннельный Интерфейс +==== Универсальный туннельный интерфейс GIF (Generic InterFace) — это псевдоинтерфейс для настроенного туннеля. Подробности описаны в man:gif[4]. В настоящее время @@ -272,7 +272,7 @@ GIF (Generic InterFace) — это псевдоинтерфейс для нас доступны. Используйте man:gifconfig[8] для назначения физических (внешних) исходных и конечных адресов интерфейсам gif. Конфигурация, использующая одно семейство адресов для внутреннего и внешнего IP-заголовка (v4 в v4 или v6 в v6), является опасной. Очень легко настроить интерфейсы и таблицы маршрутизации для выполнения бесконечного уровня туннелирования. _Пожалуйста, будьте осторожны_. -gif можно настроить так, чтобы он был дружественным к ECN. Подробнее о дружелюбности к ECN для туннелей см. crossref:ipv6[ipsec-ecn,Учет ECN в IPsec-туннелях], а о настройке — в man:gif[4]. +gif можно настроить так, чтобы он был дружественным к ECN. Подробнее о дружелюбности к ECN для туннелей см. crossref:ipv6[ipsec-ecn,Учёт ECN в IPsec-туннелях], а о настройке — в man:gif[4]. Если вы хотите настроить туннель IPv4-в-IPv6 с интерфейсом gif, внимательно прочитайте man:gif[4]. Вам потребуется удалить линк-локальный адрес IPv6, автоматически назначенный интерфейсу gif. @@ -291,7 +291,7 @@ gif можно настроить так, чтобы он был дружест Например, ::1 выбирается для ff01::1, fe80:1::200:f8ff:fe01:6317 для fe80:1::2a0:24ff:feab:839b (обратите внимание, что встроенный индекс интерфейса — описанный в crossref:ipv6[ipv6-scope-index,Индекс зоны] — помогает нам выбрать правильный исходный адрес. Эти встроенные индексы не будут передаваться по сети). Если исходящий интерфейс имеет несколько адресов для данной зоны, исходный адрес выбирается на основе наибольшего соответствия (правило 3). Предположим, что 2001:0DB8:808:1:200:f8ff:fe01:6317 и 2001:0DB8:9:124:200:f8ff:fe01:6317 назначены исходящему интерфейсу. 2001:0DB8:808:1:200:f8ff:fe01:6317 выбирается в качеств исходящего адреса для адреса назначения 2001:0DB8:800::1. -Обратите внимание, что приведенное выше правило не документировано в спецификации IPv6. Оно считается элементом, оставленным "на усмотрение реализации". Существуют случаи, когда мы не используем это правило. Один из примеров — установленное TCP-соединение, где мы используем адрес, сохраненный в tcb, в качестве источника. Другой пример — исходящий адрес для Объявления Соседа (Neighbor Advertisement). Согласно спецификации (RFC2461 7.2.2) источник NA должен быть целевым адресом соответствующего NS. В этом случае мы следуем спецификации, а не приведенному выше правилу наибольшего совпадения. +Обратите внимание, что приведённое выше правило не документировано в спецификации IPv6. Оно считается элементом, оставленным "на усмотрение реализации". Существуют случаи, когда мы не используем это правило. Один из примеров — установленное TCP-соединение, где мы используем адрес, сохранённый в tcb, в качестве источника. Другой пример — исходящий адрес для Объявления Соседа (Neighbor Advertisement). Согласно спецификации (RFC2461 7.2.2) источник NA должен быть целевым адресом соответствующего NS. В этом случае мы следуем спецификации, а не приведённому выше правилу наибольшего совпадения. Для новых соединений (когда правило 1 не применяется), устаревшие адреса (адреса с предпочтительным временем жизни = 0) не будут выбираться в качестве исходящего адреса, если доступны другие варианты. Если других вариантов нет, устаревший адрес будет использован в качестве последнего средства. Если есть несколько устаревших адресов, для выбора между ними будет применено указанное выше правило области видимости. Если вы хотите запретить использование устаревших адресов по какой-либо причине, установите параметр net.inet6.ip6.use_deprecated в знач ение 0. Проблема, связанная с устаревшими адресами, описана в RFC2462 5.5.4 (ПРИМЕЧАНИЕ: в IETF ipngwg ведутся дебаты о том, как использовать "устаревшие" адреса). @@ -409,7 +409,7 @@ FreeBSD 4.x configurable supported Комментарии о принимающей стороне: -Похоже, что в RFC2553 слишком мало сказано о проблеме привязки к подстановочному адресу, особенно о вопросе пространства портов, режиме отказа и взаимосвязи между AF_INET/INET6 wildcard bind. Может быть несколько различных интерпретаций этого RFC, которые соответствуют ему, но ведут себя по-разному. Поэтому для создания переносимых приложений не следует делать никаких предположений о поведении в ядре. Использование man:getaddrinfo[3] является наиболее безопасным способом. Вопросы пространства номеров портов и привязки к подстановочному адресу подробно об уждались в рассылке ipv6imp в середине марта 1999 года, и похоже, что конкретного консенсуса нет (то есть, остается на усмотрение реализаторов). Возможно, вам стоит проверить архивы рассылки. +Похоже, что в RFC2553 слишком мало сказано о проблеме привязки к подстановочному адресу, особенно о вопросе пространства портов, режиме отказа и взаимосвязи между AF_INET/INET6 wildcard bind. Может быть несколько различных интерпретаций этого RFC, которые соответствуют ему, но ведут себя по-разному. Поэтому для создания переносимых приложений не следует делать никаких предположений о поведении в ядре. Использование man:getaddrinfo[3] является наиболее безопасным способом. Вопросы пространства номеров портов и привязки к подстановочному адресу подробно об уждались в рассылке ipv6imp в середине марта 1999 года, и похоже, что конкретного консенсуса нет (то есть, остаётся на усмотрение реализаторов). Возможно, вам стоит проверить архивы рассылки. Если серверное приложение хочет принимать IPv4 и IPv6 соединения, есть два варианта. @@ -446,7 +446,7 @@ FreeBSD 4.x configurable supported ===== унифицированный код tcp и inpcb -FreeBSD 4.x использует общий код tcp для IPv4 и IPv6 (из sys/netinet/tcp*) и раздельный код udp4/6. В нем используется унифицированная структура inpcb. +FreeBSD 4.x использует общий код tcp для IPv4 и IPv6 (из sys/netinet/tcp*) и раздельный код udp4/6. В нём используется унифицированная структура inpcb. Платформа может быть настроена для поддержки IPv4-отображённых адресов. Конфигурация ядра кратко описана ниже: @@ -543,7 +543,7 @@ FreeBSD 4.x поддерживает исходящее соединение с [[ipsec-implementation]] === IPsec -IPsec состоит в основном из трех компонент. +IPsec состоит в основном из трёх компонент. . Управление политиками . Управление ключами @@ -631,7 +631,7 @@ IPsec состоит в основном из трех компонент. IPsec (в ядре) и IKE (в пользовательском пространстве как "racoon") были протестированы на нескольких мероприятиях по тестированию взаимодействия и известно, что они хорошо работают со многими другими реализациями. Кроме того, текущая реализация IPsec поддерживает довольно широкий спектр криптографических алгоритмов IPsec, описанных в RFC (мы поддерживаем только алгоритмы без проблем с интеллектуальной собственностью). [[ipsec-ecn]] -==== Учет ECN в IPsec-туннелях +==== Учёт ECN в IPsec-туннелях Поддерживается ECN-совместимый IPsec-туннель, как описано в [.filename]#draft-ipsec-ecn-00.txt#. @@ -641,7 +641,7 @@ IPsec (в ядре) и IKE (в пользовательском простран Реализация туннеля IPsec может обеспечить три варианта поведения, в зависимости от значения параметра `net.inet.ipsec.ecn` (или `net.inet6.ipsec6.ecn`): -* RFC2401: отсутствие учета ECN (значение sysctl -1) +* RFC2401: отсутствие учёта ECN (значение sysctl -1) * ECN запрещён (значение sysctl 0) * ECN разрешён (значение sysctl 1) diff --git a/documentation/content/ru/books/developers-handbook/ipv6/_index.po b/documentation/content/ru/books/developers-handbook/ipv6/_index.po index 44fc7db587..4371e21dbe 100644 --- a/documentation/content/ru/books/developers-handbook/ipv6/_index.po +++ b/documentation/content/ru/books/developers-handbook/ipv6/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025. +# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2025-11-12 04:45+0000\n" +"PO-Revision-Date: 2026-03-04 20:01+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" "documentation/booksdevelopers-handbookipv6_index/ru/>\n" @@ -140,9 +140,10 @@ msgid "" "way, and it covers \"configured tunnel\" described in the spec. See crossref:" "ipv6[gif,Generic Tunnel Interface] in this document for details." msgstr "" -"man:gif[4] интерфейс реализует IPv[46]-поверх-IPv[46] туннель в общем виде и " -"включает \"настроенный туннель\", описанный в спецификации. Подробности см. " -"в crossref:ipv6[gif,Универсальный Туннельный Интерфейс] этого документа." +"Интерфейс man:gif[4] реализует IPv[46]-поверх-IPv[46] туннель в общем виде и " +"включает \"настроенный туннель\", описанный в спецификации. За подробностями " +"обратитесь к разделу crossref:ipv6[gif,Универсальный туннельный интерфейс] " +"этого документа." #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:86 @@ -366,7 +367,7 @@ msgid "" "[.filename]#draft-ietf-ipngwg-icmp-namelookups-02#: IPv6 Name Lookups " "Through ICMP" msgstr "" -"[.filename]#draft-ietf-ipngwg-icmp-namelookups-02#: Поиск имен через ICMP в " +"[.filename]#draft-ietf-ipngwg-icmp-namelookups-02#: Поиск имён через ICMP в " "IPv6" #. type: Plain text @@ -375,7 +376,7 @@ msgid "" "[.filename]#draft-ietf-ipngwg-icmp-name-lookups-03#: IPv6 Name Lookups " "Through ICMP" msgstr "" -"[.filename]#draft-ietf-ipngwg-icmp-name-lookups-03#: Поиск имен IPv6 через " +"[.filename]#draft-ietf-ipngwg-icmp-name-lookups-03#: Поиск имён IPv6 через " "ICMP" #. type: Plain text @@ -950,7 +951,7 @@ msgstr "" #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:321 #, no-wrap msgid "Generic Tunnel Interface" -msgstr "Универсальный Туннельный Интерфейс" +msgstr "Универсальный туннельный интерфейс" #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:325 @@ -1005,7 +1006,7 @@ msgid "" "gif[4] for how to configure." msgstr "" "gif можно настроить так, чтобы он был дружественным к ECN. Подробнее о " -"дружелюбности к ECN для туннелей см. crossref:ipv6[ipsec-ecn,Учет ECN в " +"дружелюбности к ECN для туннелей см. crossref:ipv6[ipsec-ecn,Учёт ECN в " "IPsec-туннелях], а о настройке — в man:gif[4]." #. type: Plain text @@ -1127,14 +1128,14 @@ msgid "" "should be the target address of the corresponding NS's target. In this case " "we follow the spec rather than the above longest-match rule." msgstr "" -"Обратите внимание, что приведенное выше правило не документировано в " +"Обратите внимание, что приведённое выше правило не документировано в " "спецификации IPv6. Оно считается элементом, оставленным \"на усмотрение " "реализации\". Существуют случаи, когда мы не используем это правило. Один из " "примеров — установленное TCP-соединение, где мы используем адрес, " -"сохраненный в tcb, в качестве источника. Другой пример — исходящий адрес для " -"Объявления Соседа (Neighbor Advertisement). Согласно спецификации (RFC2461 " -"7.2.2) источник NA должен быть целевым адресом соответствующего NS. В этом " -"случае мы следуем спецификации, а не приведенному выше правилу наибольшего " +"сохранённый в tcb, в качестве источника. Другой пример — исходящий адрес для " +"Объявления Соседа (Neighbor Advertisement). Согласно спецификации (RFC2461 7." +"2.2) источник NA должен быть целевым адресом соответствующего NS. В этом " +"случае мы следуем спецификации, а не приведённому выше правилу наибольшего " "совпадения." #. type: Plain text @@ -1666,12 +1667,12 @@ msgstr "" "отказа и взаимосвязи между AF_INET/INET6 wildcard bind. Может быть " "несколько различных интерпретаций этого RFC, которые соответствуют ему, но " "ведут себя по-разному. Поэтому для создания переносимых приложений не " -"следует делать никаких предположений о поведении в ядре. Использование man:" -"getaddrinfo[3] является наиболее безопасным способом. Вопросы пространства " -"номеров портов и привязки к подстановочному адресу подробно обсуждались в " -"рассылке ipv6imp в середине марта 1999 года, и похоже, что конкретного " -"консенсуса нет (то есть, остается на усмотрение реализаторов). Возможно, " -"вам стоит проверить архивы рассылки." +"следует делать никаких предположений о поведении в ядре. Использование " +"man:getaddrinfo[3] является наиболее безопасным способом. Вопросы " +"пространства номеров портов и привязки к подстановочному адресу подробно " +"обсуждались в рассылке ipv6imp в середине марта 1999 года, и похоже, что " +"конкретного консенсуса нет (то есть, остаётся на усмотрение реализаторов). " +"Возможно, вам стоит проверить архивы рассылки." #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:534 @@ -1867,7 +1868,7 @@ msgid "" "tcp*) and separate udp4/6 code. It uses unified inpcb structure." msgstr "" "FreeBSD 4.x использует общий код tcp для IPv4 и IPv6 (из sys/netinet/tcp*) и " -"раздельный код udp4/6. В нем используется унифицированная структура inpcb." +"раздельный код udp4/6. В нём используется унифицированная структура inpcb." #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:588 @@ -2208,7 +2209,7 @@ msgstr "IPsec" #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:690 msgid "IPsec is mainly organized by three components." -msgstr "IPsec состоит в основном из трех компонент." +msgstr "IPsec состоит в основном из трёх компонент." #. type: Title ==== #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:692 @@ -2610,7 +2611,7 @@ msgstr "" #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:793 #, no-wrap msgid "ECN Consideration on IPsec Tunnels" -msgstr "Учет ECN в IPsec-туннелях" +msgstr "Учёт ECN в IPsec-туннелях" #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:796 @@ -2662,7 +2663,7 @@ msgstr "" #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:808 msgid "RFC2401: no consideration for ECN (sysctl value -1)" -msgstr "RFC2401: отсутствие учета ECN (значение sysctl -1)" +msgstr "RFC2401: отсутствие учёта ECN (значение sysctl -1)" #. type: Plain text #: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:809 diff --git a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc index 0578ee9087..973ef9f796 100644 --- a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc +++ b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc @@ -567,7 +567,7 @@ kdb_enter (why=<optimized out>, msg=<optimized out>) at /usr/src/sys/kern/subr_k В зависимости от используемого компилятора, некоторые локальные переменные могут отображаться как `<optimized out>`, что не позволяет их напрямую исследовать с помощью `gdb`. Если это вызывает проблемы при отладке, можно собрать ядро с пониженным уровнем оптимизации, что может улучшить видимость некоторых переменных. Это можно сделать, передав `COPTFLAGS=-O1` в man:make[1]. Однако определённые классы ошибок в ядре могут проявляться иначе (или вообще не проявляться) при изменении уровня оптимизации. ==== -Вы можете использовать этот сеанс почти как любой другой сеанс GDB, включая полный доступ к исходному коду, запуск в режиме gud (Grand Unified Debugger) внутри окна Emacs (что дает автоматическое отображение исходного кода в другом окне Emacs) и т.д. +Вы можете использовать этот сеанс почти как любой другой сеанс GDB, включая полный доступ к исходному коду, запуск в режиме gud (Grand Unified Debugger) внутри окна Emacs (что даёт автоматическое отображение исходного кода в другом окне Emacs) и т.д. [[kerneldebug-console]] == Отладка драйвера консоли @@ -766,7 +766,7 @@ M-x gdba * `options WITNESS_SKIPSPIN`: отключает проверку порядка блокировки spinlock во время выполнения с WITNESS. Поскольку spin-блокировки чаще всего захватываются в планировщике, а события планировщика происходят часто, эта опция может значительно ускорить системы, работающие с WITNESS. Эта опция зависит от `options WITNESS`. * `options WITNESS_KDB`: изменяет значение по умолчанию системной настройки `debug.witness.kdb` на 1, что приводит к входу в отладчик при обнаружении нарушения порядка блокировок вместо простого вывода предупреждения. Эта опция зависит от `options WITNESS`. * `options SOCKBUF_DEBUG`: выполнять расширенную проверку согласованности сокетных буферов во время выполнения, что может быть полезно для отладки как ошибок в сокетах, так и состояний гонки в протоколах и драйверах устройств, взаимодействующих с сокетами. Данная опция значительно влияет на производительность сети и может изменить временные параметры в состояниях гонки драйверов устройств. -* `options DEBUG_VFS_LOCKS`: отслеживает точки получения блокировок для lockmgr/vnode, расширяя объем информации, отображаемой командой `show lockedvnods` в DDB. Данная опция оказывает заметное влияние на производительность. +* `options DEBUG_VFS_LOCKS`: отслеживает точки получения блокировок для lockmgr/vnode, расширяя объём информации, отображаемой командой `show lockedvnods` в DDB. Данная опция оказывает заметное влияние на производительность. * `options DEBUG_MEMGUARD`: замена для man:malloc[9], аллокатор памяти ядра, который использует систему VM для обнаружения чтения или записи в освобождённую память. Подробности можно найти в man:memguard[9]. Данная опция значительно влияет на производительность, но может быть очень полезна при отладке ошибок повреждения памяти ядра. * `options DIAGNOSTIC`: включает дополнительные, более затратные диагностические тесты, аналогичные `options INVARIANTS`. * `options KASAN`: включает отладчик адресов ядра (Kernel Address Sanitizer). Это включает инструментирование компилятора, которое может использоваться для обнаружения недопустимых обращений к памяти в ядре, таких как использование после освобождения и переполнение буфера. В значительной степени заменяет `options DEBUG_MEMGUARD`. Подробности и список поддерживаемых платформ см. в man:kasan[9]. diff --git a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po index bda6f032ce..22ce3fd168 100644 --- a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po +++ b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025. +# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-06-29 21:20+0100\n" -"PO-Revision-Date: 2025-11-12 04:45+0000\n" +"PO-Revision-Date: 2026-03-04 20:01+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" "documentation/booksdevelopers-handbookkerneldebug_index/ru/>\n" @@ -1400,7 +1400,7 @@ msgid "" msgstr "" "Вы можете использовать этот сеанс почти как любой другой сеанс GDB, включая " "полный доступ к исходному коду, запуск в режиме gud (Grand Unified Debugger) " -"внутри окна Emacs (что дает автоматическое отображение исходного кода в " +"внутри окна Emacs (что даёт автоматическое отображение исходного кода в " "другом окне Emacs) и т.д." #. type: Title == @@ -2170,7 +2170,7 @@ msgid "" "in DDB. This option has a measurable performance impact." msgstr "" "`options DEBUG_VFS_LOCKS`: отслеживает точки получения блокировок для " -"lockmgr/vnode, расширяя объем информации, отображаемой командой `show " +"lockmgr/vnode, расширяя объём информации, отображаемой командой `show " "lockedvnods` в DDB. Данная опция оказывает заметное влияние на " "производительность." diff --git a/documentation/content/ru/books/developers-handbook/l10n/_index.adoc b/documentation/content/ru/books/developers-handbook/l10n/_index.adoc index 843e2eea72..0ef047e823 100644 --- a/documentation/content/ru/books/developers-handbook/l10n/_index.adoc +++ b/documentation/content/ru/books/developers-handbook/l10n/_index.adoc @@ -58,7 +58,7 @@ endif::[] === Призыв к объединению усилий по интернационализации -Нам стало известно, что индивидуальные усилия по интернационализации (I18N) и локализации (L10N) в каждой стране дублируют работу друг друга. Многие из нас снова и снова неэффективно изобретают велосипед. Мы надеемся, что различные крупные группы разработчиков в области I18N смогут объединится для совместной работы и ответственности, подобно Core Team в FreeBSD. +Нам стало известно, что индивидуальные усилия по интернационализации (I18N) и локализации (L10N) в каждой стране дублируют работу друг друга. Многие из нас снова и снова неэффективно изобретают велосипед. Мы надеемся, что различные крупные группы разработчиков в области I18N смогут объединится для совместной работы и ответственности, подобно Основной команде в FreeBSD. В настоящее время мы надеемся, что при написании или портировании I18N-программ вы будете отправлять их в соответствующие списки рассылки FreeBSD каждой страны для тестирования. В будущем мы надеемся создать приложения, которые будут работать на всех языках "из коробки" без грязных хаков. diff --git a/documentation/content/ru/books/developers-handbook/l10n/_index.po b/documentation/content/ru/books/developers-handbook/l10n/_index.po index 815046a819..879ed2b24d 100644 --- a/documentation/content/ru/books/developers-handbook/l10n/_index.po +++ b/documentation/content/ru/books/developers-handbook/l10n/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2025-11-11 04:45+0000\n" +"PO-Revision-Date: 2025-11-21 04:45+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" "documentation/booksdevelopers-handbookl10n_index/ru/>\n" @@ -93,7 +93,7 @@ msgstr "" "и локализации (L10N) в каждой стране дублируют работу друг друга. Многие из " "нас снова и снова неэффективно изобретают велосипед. Мы надеемся, что " "различные крупные группы разработчиков в области I18N смогут объединится для " -"совместной работы и ответственности, подобно Core Team в FreeBSD." +"совместной работы и ответственности, подобно Основной команде в FreeBSD." #. type: Plain text #: documentation/content/en/books/developers-handbook/l10n/_index.adoc:73 diff --git a/documentation/content/ru/books/developers-handbook/policies/_index.adoc b/documentation/content/ru/books/developers-handbook/policies/_index.adoc index 881c669f3a..763b3c0449 100644 --- a/documentation/content/ru/books/developers-handbook/policies/_index.adoc +++ b/documentation/content/ru/books/developers-handbook/policies/_index.adoc @@ -110,18 +110,18 @@ MAINTAINER= email-addresses . Любой файл, который интерпретируется или выполняется процессором(-ами) системы и не представлен в исходном формате, является обременённым. . Любой файл с лицензией более ограничительной, чем BSD или GNU, является обременённым. . Файл, содержащий загружаемые двоичные данные для использования оборудованием, не является обремененным, если к нему не применяется пункт (1) или (2). -. Любой файл с правовыми ограничениями требует специального одобрения от link:https://www.FreeBSD.org/administration/#t-core[Core Team] перед добавлением в репозиторий. +. Любой файл с правовыми ограничениями требует специального одобрения от link:https://www.FreeBSD.org/administration/#t-core[Основно команды (Core Team)] перед добавлением в репозиторий. . Обремененные файлы помещаются в [.filename]#src/contrib# или [.filename]#src/sys/contrib#. . Весь модуль должен храниться вместе. Нет смысла разделять его, если только нет совместного использования кода с необременённой частью кода. . В прошлом бинарные файлы обычно кодировались с помощью uuencode и назывались [.filename]#arch/filename.o.uu#. Теперь в этом нет необходимости, и бинарные файлы могут добавляться в репозиторий без изменений. . Файлы ядра системы: .. Всегда должны быть указана в [.filename]#conf/files.*# (для упрощения сборки). -.. Всегда должны быть в [.filename]#LINT#, но link:https://www.FreeBSD.org/administration/#t-core[Core Team] решает в каждом конкретном случае, следует ли их закомментировать или нет. link:https://www.FreeBSD.org/administration/#t-core[Core Team] может, конечно, позже изменить свое решение. +.. Всегда должны быть в [.filename]#LINT#, но link:https://www.FreeBSD.org/administration/#t-core[Основна команда (Core Team)] решает в каждом конкретном случае, следует ли их закомментировать или нет. link:https://www.FreeBSD.org/administration/#t-core[Основна команда] может, конечно, позже изменить свое решение. .. _Инженер по выпуску_ решает, будет ли это включено в выпуск. . Пользовательские файлы: -.. Команда link:https://www.FreeBSD.org/administration/#t-core[Core team] принимает решение о включении кода в базовую устанавливаемую систему. -.. link:https://www.FreeBSD.org/administration/#t-re[Отде разработки релизов] решает, войдет ли это в релиз. +.. Команда link:https://www.FreeBSD.org/administration/#t-core[Основна команда (Core team)] принимает решение о включении кода в базовую устанавливаемую систему. +.. link:https://www.FreeBSD.org/administration/#t-re[Команд подготовки релизов] решает, будет ли это включено в релиз. [[policies-shlib]] == Динамические библиотеки @@ -139,7 +139,7 @@ MAINTAINER= email-addresses * Настоятельно рекомендуется добавить контроль версий символов в новую библиотеку * Если есть несовместимое изменение, обработайте его с помощью версионирования символов, сохраняя обратную совместимость ABI * Если это невозможно или библиотека не использует версионирование символов, увеличьте версию библиотеки -* Прежде чем даже рассматривать увеличение версии библиотеки для библиотеки с версионированием символов, проконсультируйтесь с командой Release Engineering, предоставив причины, почему изменение настолько важно, что его следует разрешить, несмотря на нарушение ABI +* Прежде чем даже рассматривать увеличение версии библиотеки для библиотеки с версионированием символов, проконсультируйтесь с Командой подготовки релизов, предоставив причины, почему изменение настолько важно, что его следует разрешить, несмотря на нарушение ABI Например, добавленные функции и исправления ошибок, не изменяющие интерфейсы, допустимы, тогда как удалённые функции, изменённый синтаксис вызовов и т.д. должны либо предоставлять обратно-совместимые символы, либо приведут к изменению старшего номера версии. diff --git a/documentation/content/ru/books/developers-handbook/policies/_index.po b/documentation/content/ru/books/developers-handbook/policies/_index.po index ba64ecaad2..0afe78232d 100644 --- a/documentation/content/ru/books/developers-handbook/policies/_index.po +++ b/documentation/content/ru/books/developers-handbook/policies/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025. +# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-06-29 21:20+0100\n" -"PO-Revision-Date: 2025-09-05 04:45+0000\n" +"PO-Revision-Date: 2026-03-04 20:01+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" "documentation/booksdevelopers-handbookpolicies_index/ru/>\n" @@ -304,8 +304,8 @@ msgid "" "repository." msgstr "" "Любой файл с правовыми ограничениями требует специального одобрения от " -"link:https://www.FreeBSD.org/administration/#t-core[Core Team] перед " -"добавлением в репозиторий." +"link:https://www.FreeBSD.org/administration/#t-core[Основно команды (Core " +"Team)] перед добавлением в репозиторий." #. type: Plain text #: documentation/content/en/books/developers-handbook/policies/_index.adoc:127 @@ -359,9 +359,10 @@ msgid "" "Team] can, of course, change their minds later on." msgstr "" "Всегда должны быть в [.filename]#LINT#, но link:https://www.FreeBSD.org/" -"administration/#t-core[Core Team] решает в каждом конкретном случае, следует " -"ли их закомментировать или нет. link:https://www.FreeBSD.org/administration/" -"#t-core[Core Team] может, конечно, позже изменить свое решение." +"administration/#t-core[Основная команда (Core Team)] решает в каждом " +"конкретном случае, следует ли их закомментировать или нет. link:https://www." +"FreeBSD.org/administration/#t-core[Основная команда] может, конечно, позже " +"изменить свое решение." #. type: Plain text #: documentation/content/en/books/developers-handbook/policies/_index.adoc:134 @@ -379,8 +380,9 @@ msgid "" "The link:https://www.FreeBSD.org/administration/#t-core[Core team] decides " "if the code should be part of the installed base system." msgstr "" -"Команда link:https://www.FreeBSD.org/administration/#t-core[Core team] " -"принимает решение о включении кода в базовую устанавливаемую систему." +"Команда link:https://www.FreeBSD.org/administration/#t-core[Основна команда " +"(Core team)] принимает решение о включении кода в базовую устанавливаемую " +"систему." #. type: Plain text #: documentation/content/en/books/developers-handbook/policies/_index.adoc:138 @@ -388,8 +390,8 @@ msgid "" "The link:https://www.FreeBSD.org/administration/#t-re[Release Engineering] " "decides if it goes into the release." msgstr "" -"link:https://www.FreeBSD.org/administration/#t-re[Отде разработки релизов] " -"решает, войдет ли это в релиз." +"link:https://www.FreeBSD.org/administration/#t-re[Команд подготовки релизов]" +" решает, будет ли это включено в релиз." #. type: Title == #: documentation/content/en/books/developers-handbook/policies/_index.adoc:140 @@ -470,8 +472,8 @@ msgid "" "change is so important that it should be allowed despite breaking the ABI" msgstr "" "Прежде чем даже рассматривать увеличение версии библиотеки для библиотеки с " -"версионированием символов, проконсультируйтесь с командой Release " -"Engineering, предоставив причины, почему изменение настолько важно, что его " +"версионированием символов, проконсультируйтесь с Командой подготовки " +"релизов, предоставив причины, почему изменение настолько важно, что его " "следует разрешить, несмотря на нарушение ABI" #. type: Plain text diff --git a/documentation/content/ru/books/developers-handbook/secure/_index.adoc b/documentation/content/ru/books/developers-handbook/secure/_index.adoc index 0bbbd64390..cdbded5233 100644 --- a/documentation/content/ru/books/developers-handbook/secure/_index.adoc +++ b/documentation/content/ru/books/developers-handbook/secure/_index.adoc @@ -70,7 +70,7 @@ endif::[] Большинство современных компьютерных систем используют стек для передачи аргументов процедурам и хранения локальных переменных. Стек — это буфер типа "последним пришёл — первым ушёл" (LIFO) в верхней области памяти процесса. Когда программа вызывает функцию, создаётся новый "стековый кадр". Этот стековый кадр состоит из аргументов, переданных функции, а также динамического количества места для локальных переменных. "Указатель стека" — это регистр, который содержит текущее местоположение вершины стека. Поскольку это значение постоян но меняется по мере добавления новых значений на вершину стека, многие реализации также предоставляют "указатель кадра", который располагается вблизи начала стекового кадра, чтобы локальные переменные могли легче адресоваться относительно этого значения. crossref:bibliography[COD,1] Адрес возврата для вызовов функций также хранится в стеке, и это является причиной эксплойтов переполнения стека, поскольку переполнение локальной переменной в функции может перезаписать адрес возврата этой функции, потенциально позволяя злоумышленнику выполни ь любой код по своему усмотрению. -Хотя атаки на стек являются наиболее распространенными, также возможно переполнение стека с помощью атаки на кучу (malloc/free). +Хотя атаки на стек являются наиболее распространёнными, также возможно переполнение стека с помощью атаки на кучу (malloc/free). Язык программирования C не выполняет автоматическую проверку границ массивов или указателей, как это делают многие другие языки. Кроме того, стандартная библиотека C содержит множество очень опасных функций. @@ -197,7 +197,7 @@ ProPolice помогает защититься от переполнений б Суперпользователь в среде клетки имеет возможность: -* Управлять учетными данными с помощью `setuid`, `seteuid`, `setgid`, `setegid`, `setgroups`, `setreuid`, `setregid`, `setlogin` +* Управлять учётными данными с помощью `setuid`, `seteuid`, `setgid`, `setegid`, `setgroups`, `setreuid`, `setregid`, `setlogin` * Устанавливать ограничений ресурсов с помощью `setrlimit` * Изменять некоторые узлы sysctl (kern.hostname) * `chroot()` @@ -225,6 +225,6 @@ POSIX(R) выпустил рабочий проект, который добав [[secure-race-conditions]] == Состояние гонки -Состояние гонки — это аномальное поведение, вызванное непредвиденной зависимостью от относительного времени событий. Другими словами, программист ошибочно предположил, что определенное событие всегда произойдет раньше другого. +Состояние гонки — это аномальное поведение, вызванное непредвиденной зависимостью от относительного времени событий. Другими словами, программист ошибочно предположил, что определённое событие всегда произойдет раньше другого. Некоторые из распространённых причин состояний гонки — это сигналы, проверки доступа и открытие файлов. Сигналы по своей природе являются асинхронными событиями, поэтому при работе с ними необходимо проявлять особую осторожность. Проверка доступа с помощью `access(2)`, а затем `open(2)` явно неатомарна. Пользователи могут перемещать файлы между этими двумя вызовами. Вместо этого привилегированные приложения должны использовать `seteuid()`, а затем вызывать `open()` напрямую. По аналогии, приложение всегда должно устанавливать правильную маску (`umas k`) перед вызовом `open()`, чтобы избежать необходимости в лишних вызовах `chmod()`. diff --git a/documentation/content/ru/books/developers-handbook/secure/_index.po b/documentation/content/ru/books/developers-handbook/secure/_index.po index 8df1ae4fae..a79c5cf9d1 100644 --- a/documentation/content/ru/books/developers-handbook/secure/_index.po +++ b/documentation/content/ru/books/developers-handbook/secure/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2025-11-12 04:45+0000\n" +"PO-Revision-Date: 2025-11-25 04:45+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" "documentation/booksdevelopers-handbooksecure_index/ru/>\n" @@ -155,7 +155,7 @@ msgid "" "Although stack-based attacks are by far the most common, it would also be " "possible to overrun the stack with a heap-based (malloc/free) attack." msgstr "" -"Хотя атаки на стек являются наиболее распространенными, также возможно " +"Хотя атаки на стек являются наиболее распространёнными, также возможно " "переполнение стека с помощью атаки на кучу (malloc/free)." #. type: Plain text @@ -645,8 +645,8 @@ msgid "" "Manipulate credential with `setuid`, `seteuid`, `setgid`, `setegid`, " "`setgroups`, `setreuid`, `setregid`, `setlogin`" msgstr "" -"Управлять учетными данными с помощью `setuid`, `seteuid`, `setgid`, " -"`setegid`, `setgroups`, `setreuid`, `setregid`, `setlogin`" +"Управлять учётными данными с помощью `setuid`, `seteuid`, `setgid`, `setegid`" +", `setgroups`, `setreuid`, `setregid`, `setlogin`" #. type: Plain text #: documentation/content/en/books/developers-handbook/secure/_index.adoc:248 @@ -798,7 +798,7 @@ msgid "" msgstr "" "Состояние гонки — это аномальное поведение, вызванное непредвиденной " "зависимостью от относительного времени событий. Другими словами, программист " -"ошибочно предположил, что определенное событие всегда произойдет раньше " +"ошибочно предположил, что определённое событие всегда произойдет раньше " "другого." #. type: Plain text diff --git a/documentation/content/ru/books/developers-handbook/sockets/_index.adoc b/documentation/content/ru/books/developers-handbook/sockets/_index.adoc index 822ec551f3..5c59c2469f 100644 --- a/documentation/content/ru/books/developers-handbook/sockets/_index.adoc +++ b/documentation/content/ru/books/developers-handbook/sockets/_index.adoc @@ -69,9 +69,9 @@ endif::[] Часто думают, что _язык тела_ универсален. Но это не так. В ранней юности отец взял меня с собой в Болгарию. Мы сидели за столиком в парке Софии, когда к нам подошел продавец, предлагая купить жареный миндаль. -Я тогда еще не знал болгарского, поэтому вместо словесного отказа я покачал головой из стороны в сторону — это «универсальный» язык тела для обозначения _нет_. Продавец тут же начал угощать нас миндалем. +Я тогда ещё не знал болгарского, поэтому вместо словесного отказа я покачал головой из стороны в сторону — это «универсальный» язык тела для обозначения _нет_. Продавец тут же начал угощать нас миндалем. -Затем я вспомнил, что мне говорили, будто в Болгарии покачивание головой из стороны в сторону означает _да_. Быстро я начал кивать головой вверх-вниз. Продавец заметил, взял свои миндалины и ушёл. Для непосвящённого наблюдателя я не изменил язык тела: я продолжал использовать движения головой — покачивание и кивание. Изменился _смысл_ языка тела. Сначала продавец и я интерпретировали одни и те же жесты как имеющие совершенно разный смысл. Мне пришлось скорректировать свою собственную интерпретацию этих жестов, чтобы продавец меня понял. +Затем я вспомнил, что мне говорили, будто в Болгарии покачивание головой из стороны в сторону означает _да_. Быстро я начал кивать головой вверх-вниз. Продавец заметил, забрал свои орехи и ушёл. Для непосвящённого наблюдателя я не изменил язык тела: я продолжал использовать движения головой — покачивание и кивание. Изменился _смысл_ языка тела. Сначала продавец и я интерпретировали одни и те же жесты как имеющие совершенно разный смысл. Мне пришлось скорректировать свою собственную интерпретацию этих жестов, чтобы продавец меня понял. То же самое и с компьютерами: одни и те же символы могут иметь разное, даже полностью противоположное значение. Поэтому, чтобы два компьютера понимали друг друга, они должны договориться не только об одном _языке_, но и об одном _толковании_ языка. @@ -217,7 +217,7 @@ struct sockaddr { Обратите внимание на _неопределённость_, с которой объявлено поле `sa_data` — просто как массив из `14` байт, с комментарием, намекающим, что их может быть больше `14`. -Эта неопределенность вполне преднамеренна. Сокеты — это очень мощный интерфейс. Хотя большинство людей, возможно, считают их не более чем интерфейсом для Интернета — и большинство приложений, вероятно, используют их именно для этого в наши дни — сокеты могут быть использованы практически для _любого_ вида межпроцессного взаимодействия, из которых Интернет (или, точнее, IP) — лишь один из них. +Эта неопределённость вполне преднамеренна. Сокеты — это очень мощный интерфейс. Хотя большинство людей, возможно, считают их не более чем интерфейсом для Интернета — и большинство приложений, вероятно, используют их именно для этого в наши дни — сокеты могут быть использованы практически для _любого_ вида межпроцессного взаимодействия, из которых Интернет (или, точнее, IP) — лишь один из них. [.filename]#sys/socket.h# ссылается на различные типы протоколов, с которыми работают сокеты, как на _семейства адресов_, и перечисляет их непосредственно перед определением `sockaddr`: @@ -298,7 +298,7 @@ image::sain.png[] Три важных поля — это `sin_family`, которое находится в байте 1 структуры, `sin_port`, 16-битное значение, расположенное в байтах 2 и 3, и `sin_addr`, 32-битное целочисленное представление IP-адреса, хранящееся в байтах 4–7. -Теперь попробуем заполнить его. Предположим, мы пытаемся написать клиент для протокола _daytime_, который просто указывает, что его сервер записывает текстовую строку с текущей датой и временем в порт 13. Мы хотим использовать TCP/IP, поэтому нам нужно указать `AF_INET` в поле семейства адресов. `AF_INET` определен как `2`. Давайте используем IP-адрес `192.43.244.18`, который является сервером времени федерального правительства США (`time.nist.gov`). +Теперь попробуем заполнить его. Предположим, мы пытаемся написать клиент для протокола _daytime_, который просто указывает, что его сервер записывает текстовую строку с текущей датой и временем в порт 13. Мы хотим использовать TCP/IP, поэтому нам нужно указать `AF_INET` в поле семейства адресов. `AF_INET` определен как `2`. Давайте используем IP-адрес `132.163.96.1`, который является сервером времени федерального правительства США (`time.nist.gov`). .Конкретный пример sockaddr_in image::sainfill.png[] @@ -317,7 +317,7 @@ struct in_addr { В дополнение, `in_addr_t` является 32-битным целым числом. -`192.43.244.18` — это просто удобная форма записи 32-битного целого числа, в которой перечисляются все его 8-битные байты, начиная с _старшего_. +`132.163.96.1` — это просто удобная форма записи 32-битного целого числа, в которой перечисляются все его 8-битные байты, начиная с _старшего_. До сих пор мы рассматривали `sockaddr` как абстракцию. Наш компьютер не хранит `short` целые числа как единую 16-битную сущность, а как последовательность 2 байт. Аналогично, он хранит 32-битные целые числа как последовательность 4 байт. @@ -327,7 +327,7 @@ struct in_addr { .... sa.sin_family = AF_INET; sa.sin_port = 13; -sa.sin_addr.s_addr = (((((192 << 8) | 43) << 8) | 244) << 8) | 18; +sa.sin_addr.s_addr = (((((132 << 8) | 163) << 8) | 96) << 8) | 1; .... Как будет выглядеть результат? @@ -386,7 +386,7 @@ image::sainmsb.png[] .... sa.sin_family = AF_INET; sa.sin_port = 13 << 8; -sa.sin_addr.s_addr = (((((18 << 8) | 244) << 8) | 43) << 8) | 192; +sa.sin_addr.s_addr = (((((1 << 8) | 96) << 8) | 163) << 8) | 132; .... Это _обманет_ наш компилятор, заставив его сохранить данные в _порядке байтов сети_. В некоторых случаях это именно тот способ, который нужен (например, при программировании на ассемблере). Однако в большинстве случаев это может вызвать проблему. @@ -429,7 +429,7 @@ int connect(int s, const struct sockaddr *name, socklen_t namelen); [[sockets-first-client]] ===== Наш первый клиент -Теперь мы знаем достаточно, чтобы написать очень простого клиента, который получит текущее время от `192.43.244.18` и выведет его в [.filename]#stdout#. +Теперь мы знаем достаточно, чтобы написать очень простого клиента, который получит текущее время от `132.163.96.1` и выведет его в [.filename]#stdout#. [.programlisting] .... @@ -459,7 +459,7 @@ int main() { sa.sin_family = AF_INET; sa.sin_port = htons(13); - sa.sin_addr.s_addr = htonl((((((192 << 8) | 43) << 8) | 244) << 8) | 18); + sa.sin_addr.s_addr = htonl((((((132 << 8) | 163) << 8) | 96) << 8) | 1); if (connect(s, (struct sockaddr *)&sa, sizeof sa) < 0) { perror("connect"); close(s); @@ -535,7 +535,7 @@ int listen(int s, int backlog); [[sockets-accept]] ===== `accept` -После того как вы услышите телефонный звонок, вы принимаете вызов, отвечая на звонок. Теперь вы установили соединение с вашим клиентом. Это соединение остается активным, пока вы или ваш клиент не повесите трубку. +После того как вы услышите телефонный звонок, вы принимаете вызов, отвечая на звонок. Теперь вы установили соединение с вашим клиентом. Это соединение остаётся активным, пока вы или ваш клиент не повесите трубку. Сервер принимает соединение, используя функцию man:accept[2]. @@ -658,7 +658,7 @@ if (INADDR_ANY) sa.sin_addr.s_addr = htonl(INADDR_ANY); .... -Его значение равно `0`. Поскольку мы только что использовали `bzero` для всей структуры, будет избыточным снова устанавливать его в `0`. Но если мы перенесем наш код на другую систему, где INADDR_ANY, возможно, не равен нулю, нам нужно будет присвоить его `sa.sin_addr.s_addr`. Большинство современных компиляторов C достаточно умны, чтобы заметить, что INADDR_ANY — это константа. Пока она равна нулю, они оптимизируют все условное выражение из кода. +Его значение равно `0`. Поскольку мы только что использовали `memset`, чтобы установить в 0 все байты структуры, будет избыточным снова устанавливать его в `0`. Но если мы перенесём наш код на другую систему, где INADDR_ANY, возможно, не равен нулю, нам нужно будет присвоить его `sa.sin_addr.s_addr`. Большинство современных компиляторов C достаточно умны, чтобы заметить, что INADDR_ANY — это константа. Пока она равна нулю, они оптимизируют все условное выражение из кода. После успешного вызова `bind` мы готовы стать _демоном_: используем `fork` для создания дочернего процесса. В обоих процессах, родительском и дочернем, переменная `s` является нашим сокетом. Родительскому процессу он больше не нужен, поэтому он вызывает `close`, затем возвращает `0`, чтобы сообщить своему родителю об успешном завершении. @@ -705,7 +705,7 @@ bind: Permission denied # .... -Что... Ничего? Давайте попробуем еще раз: +Что... Ничего? Давайте попробуем ещё раз: [source, bash] .... @@ -772,7 +772,7 @@ Connection closed by foreign host. [[sockets-helper-functions]] == Вспомогательные функции -Библиотека C в FreeBSD содержит множество вспомогательных функций для программирования сокетов. Например, в нашем примере клиента мы жестко прописали IP-адрес `time.nist.gov`. Но мы не всегда знаем IP-адрес. Даже если знаем, наше программное обеспечение будет более гибким, если позволит пользователю ввести IP-адрес или даже доменное имя. +Библиотека C в FreeBSD содержит множество вспомогательных функций для программирования сокетов. Например, в нашем примере клиента мы жёстко прописали IP-адрес `time.nist.gov`. Но мы не всегда знаем IP-адрес. Даже если знаем, наше программное обеспечение будет более гибким, если позволит пользователю ввести IP-адрес или даже доменное имя. [[sockets-gethostbyname]] === `gethostbyname` @@ -844,7 +844,7 @@ int main(int argc, char *argv[]) { } .... -Теперь мы можем ввести доменное имя (или IP-адрес, это работает в обоих направлениях) в командной строке, и программа попытается подключиться к его серверу _daytime_. В противном случае, по умолчанию будет использоваться `time.nist.gov`. Однако даже в этом случае мы будем использовать `gethostbyname` вместо жесткого задания `192.43.244.18`. Таким образом, даже если его IP-адрес изменится в будущем, мы всё равно сможем его найти. +Теперь мы можем ввести доменное имя (или IP-адрес, это работает в обоих направлениях) в командной строке, и программа попытается подключиться к его серверу _daytime_. В противном случае по умолчанию будет использоваться `time.nist.gov`. Однако даже в этом случае мы будем использовать `gethostbyname` вместо жёсткого указания `132.163.96.1`. Таким образом, даже если его IP-адрес изменится в будущем, мы всё равно сможем его найти. Поскольку получение времени от локального сервера занимает практически нулевое время, вы можете запустить daytime дважды подряд: сначала для получения времени от `time.nist.gov`, а затем от вашей собственной системы. После этого вы можете сравнить результаты и увидеть, насколько точны часы вашей системы: diff --git a/documentation/content/ru/books/developers-handbook/sockets/_index.po b/documentation/content/ru/books/developers-handbook/sockets/_index.po index 15be2f1255..52e372dc50 100644 --- a/documentation/content/ru/books/developers-handbook/sockets/_index.po +++ b/documentation/content/ru/books/developers-handbook/sockets/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025. +# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" -"POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2025-11-12 04:45+0000\n" +"POT-Creation-Date: 2026-02-22 15:58+0000\n" +"PO-Revision-Date: 2026-03-04 20:01+0000\n" "Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" "Language-Team: Russian <https://translate-dev.freebsd.org/projects/" "documentation/booksdevelopers-handbooksockets_index/ru/>\n" @@ -130,7 +130,7 @@ msgid "" "my head from side to side, the \"universal\" body language for _no_. The " "vendor quickly started serving us some almonds." msgstr "" -"Я тогда еще не знал болгарского, поэтому вместо словесного отказа я покачал " +"Я тогда ещё не знал болгарского, поэтому вместо словесного отказа я покачал " "головой из стороны в сторону — это «универсальный» язык тела для обозначения " "_нет_. Продавец тут же начал угощать нас миндалем." @@ -148,8 +148,8 @@ msgid "" msgstr "" "Затем я вспомнил, что мне говорили, будто в Болгарии покачивание головой из " "стороны в сторону означает _да_. Быстро я начал кивать головой вверх-вниз. " -"Продавец заметил, взял свои миндалины и ушёл. Для непосвящённого наблюдателя " -"я не изменил язык тела: я продолжал использовать движения головой — " +"Продавец заметил, забрал свои орехи и ушёл. Для непосвящённого наблюдателя я " +"не изменил язык тела: я продолжал использовать движения головой — " "покачивание и кивание. Изменился _смысл_ языка тела. Сначала продавец и я " "интерпретировали одни и те же жесты как имеющие совершенно разный смысл. Мне " "пришлось скорректировать свою собственную интерпретацию этих жестов, чтобы " @@ -671,7 +671,8 @@ msgstr "" #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:252 msgid "Use `PF_INET` for UDP, TCP and other Internet protocols (IPv4)." -msgstr "Используйте `PF_INET` для UDP, TCP и других интернет-протоколов (IPv4)." +msgstr "" +"Используйте `PF_INET` для UDP, TCP и других интернет-протоколов (IPv4)." #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:256 @@ -681,10 +682,11 @@ msgid "" "`SOCK_STREAM`, which tells the system you are asking for a _reliable stream " "delivery service_ (which is TCP when used with `PF_INET`)." msgstr "" -"Для аргумента `type` определено пять значений, также указанных в [.filename]#" -"sys/socket.h#. Все они начинаются с \"`SOCK_`\". Наиболее распространённое — " -"`SOCK_STREAM`, которое указывает системе, что запрашивается _надёжный сервис " -"потоковой доставки_ (это TCP при использовании с `PF_INET`)." +"Для аргумента `type` определено пять значений, также указанных в [." +"filename]#sys/socket.h#. Все они начинаются с \"`SOCK_`\". Наиболее " +"распространённое — `SOCK_STREAM`, которое указывает системе, что " +"запрашивается _надёжный сервис потоковой доставки_ (это TCP при " +"использовании с `PF_INET`)." #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:258 @@ -793,8 +795,8 @@ msgid "" "as an array of `14` bytes, with the comment hinting there can be more than " "`14` of them." msgstr "" -"Обратите внимание на _неопределённость_, с которой объявлено поле `sa_data` —" -" просто как массив из `14` байт, с комментарием, намекающим, что их может " +"Обратите внимание на _неопределённость_, с которой объявлено поле `sa_data` " +"— просто как массив из `14` байт, с комментарием, намекающим, что их может " "быть больше `14`." #. type: Plain text @@ -806,7 +808,7 @@ msgid "" "can be used for just about _any_ kind of interprocess communications, of " "which the Internet (or, more precisely, IP) is only one." msgstr "" -"Эта неопределенность вполне преднамеренна. Сокеты — это очень мощный " +"Эта неопределённость вполне преднамеренна. Сокеты — это очень мощный " "интерфейс. Хотя большинство людей, возможно, считают их не более чем " "интерфейсом для Интернета — и большинство приложений, вероятно, используют " "их именно для этого в наши дни — сокеты могут быть использованы практически " @@ -1010,14 +1012,14 @@ msgid "" "write a text string representing the current date and time to port 13. We " "want to use TCP/IP, so we need to specify `AF_INET` in the address family " "field. `AF_INET` is defined as `2`. Let us use the IP address of " -"`192.43.244.18`, which is the time server of US federal government " -"(`time.nist.gov`)." +"`132.163.96.1`, which is the time server of US federal government (`time." +"nist.gov`)." msgstr "" "Теперь попробуем заполнить его. Предположим, мы пытаемся написать клиент для " "протокола _daytime_, который просто указывает, что его сервер записывает " "текстовую строку с текущей датой и временем в порт 13. Мы хотим использовать " "TCP/IP, поэтому нам нужно указать `AF_INET` в поле семейства адресов. " -"`AF_INET` определен как `2`. Давайте используем IP-адрес `192.43.244.18`, " +"`AF_INET` определен как `2`. Давайте используем IP-адрес `132.163.96.1`, " "который является сервером времени федерального правительства США (`time.nist." "gov`)." @@ -1068,11 +1070,11 @@ msgstr "В дополнение, `in_addr_t` является 32-битным ц #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:406 msgid "" -"The `192.43.244.18` is just a convenient notation of expressing a 32-bit " +"The `132.163.96.1` is just a convenient notation of expressing a 32-bit " "integer by listing all of its 8-bit bytes, starting with the _most " "significant_ one." msgstr "" -"`192.43.244.18` — это просто удобная форма записи 32-битного целого числа, в " +"`132.163.96.1` — это просто удобная форма записи 32-битного целого числа, в " "которой перечисляются все его 8-битные байты, начиная с _старшего_." #. type: Plain text @@ -1098,11 +1100,11 @@ msgstr "Предположим, мы написали что-то вроде э msgid "" "sa.sin_family = AF_INET;\n" "sa.sin_port = 13;\n" -"sa.sin_addr.s_addr = (((((192 << 8) | 43) << 8) | 244) << 8) | 18;\n" +"sa.sin_addr.s_addr = (((((132 << 8) | 163) << 8) | 96) << 8) | 1;\n" msgstr "" "sa.sin_family = AF_INET;\n" "sa.sin_port = 13;\n" -"sa.sin_addr.s_addr = (((((192 << 8) | 43) << 8) | 244) << 8) | 18;\n" +"sa.sin_addr.s_addr = (((((132 << 8) | 163) << 8) | 96) << 8) | 1;\n" #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:421 @@ -1332,11 +1334,11 @@ msgstr "" msgid "" "sa.sin_family = AF_INET;\n" "sa.sin_port = 13 << 8;\n" -"sa.sin_addr.s_addr = (((((18 << 8) | 244) << 8) | 43) << 8) | 192;\n" +"sa.sin_addr.s_addr = (((((1 << 8) | 96) << 8) | 163) << 8) | 132;\n" msgstr "" "sa.sin_family = AF_INET;\n" "sa.sin_port = 13 << 8;\n" -"sa.sin_addr.s_addr = (((((18 << 8) | 244) << 8) | 43) << 8) | 192;\n" +"sa.sin_addr.s_addr = (((((1 << 8) | 96) << 8) | 163) << 8) | 132;\n" #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:494 @@ -1347,8 +1349,8 @@ msgid "" "problem." msgstr "" "Это _обманет_ наш компилятор, заставив его сохранить данные в _порядке " -"байтов сети_. В некоторых случаях это именно тот способ, который нужен (" -"например, при программировании на ассемблере). Однако в большинстве случаев " +"байтов сети_. В некоторых случаях это именно тот способ, который нужен " +"(например, при программировании на ассемблере). Однако в большинстве случаев " "это может вызвать проблему." #. type: Plain text @@ -1525,10 +1527,10 @@ msgstr "Наш первый клиент" #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:550 msgid "" "We now know enough to write a very simple client, one that will get current " -"time from `192.43.244.18` and print it to [.filename]#stdout#." +"time from `132.163.96.1` and print it to [.filename]#stdout#." msgstr "" "Теперь мы знаем достаточно, чтобы написать очень простого клиента, который " -"получит текущее время от `192.43.244.18` и выведет его в [.filename]#stdout#." +"получит текущее время от `132.163.96.1` и выведет его в [.filename]#stdout#." #. type: delimited block . 4 #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:564 @@ -1600,7 +1602,7 @@ msgstr " memset(&sa, '\\0', sizeof(sa));\n" msgid "" " sa.sin_family = AF_INET;\n" " sa.sin_port = htons(13);\n" -" sa.sin_addr.s_addr = htonl((((((192 << 8) | 43) << 8) | 244) << 8) | 18);\n" +" sa.sin_addr.s_addr = htonl((((((132 << 8) | 163) << 8) | 96) << 8) | 1);\n" " if (connect(s, (struct sockaddr *)&sa, sizeof sa) < 0) {\n" " perror(\"connect\");\n" " close(s);\n" @@ -1609,7 +1611,7 @@ msgid "" msgstr "" " sa.sin_family = AF_INET;\n" " sa.sin_port = htons(13);\n" -" sa.sin_addr.s_addr = htonl((((((192 << 8) | 43) << 8) | 244) << 8) | 18);\n" +" sa.sin_addr.s_addr = htonl((((((132 << 8) | 163) << 8) | 96) << 8) | 1);\n" " if (connect(s, (struct sockaddr *)&sa, sizeof sa) < 0) {\n" " perror(\"connect\");\n" " close(s);\n" @@ -1842,7 +1844,7 @@ msgid "" msgstr "" "После того как вы услышите телефонный звонок, вы принимаете вызов, отвечая " "на звонок. Теперь вы установили соединение с вашим клиентом. Это соединение " -"остается активным, пока вы или ваш клиент не повесите трубку." +"остаётся активным, пока вы или ваш клиент не повесите трубку." #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:672 @@ -1882,8 +1884,8 @@ msgid "" "What happens to the old socket? It continues to listen for more requests " "(remember the `backlog` variable we passed to `listen`?) until we `close` it." msgstr "" -"Что происходит со старым сокетом? Он продолжает ожидать новые запросы (" -"помните переменную `backlog`, которую мы передали в `listen`?), пока мы не " +"Что происходит со старым сокетом? Он продолжает ожидать новые запросы " +"(помните переменную `backlog`, которую мы передали в `listen`?), пока мы не " "закроем его (`close`)." #. type: Plain text @@ -1921,8 +1923,8 @@ msgid "" "program invoked it)." msgstr "" "Это лучше всего достигается созданием _дочернего процесса_ после привязки " -"порта. Затем основной процесс завершается и возвращает управление оболочке (" -"или любой другой программе, которая его вызвала)." +"порта. Затем основной процесс завершается и возвращает управление оболочке " +"(или любой другой программе, которая его вызвала)." #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:701 @@ -2144,8 +2146,7 @@ msgid "" " tm->tm_sec);\n" msgstr "" " tm = gmtime(&t);\n" -" fprintf(client, \"%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ\\n" -"\",\n" +" fprintf(client, \"%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ\\n\",\n" " tm->tm_year + 1900,\n" " tm->tm_mon + 1,\n" " tm->tm_mday,\n" @@ -2187,20 +2188,20 @@ msgstr "" #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:806 msgid "" -"Its value is `0`. Since we have just used `bzero` on the entire structure, " -"it would be redundant to set it to `0` again. But if we port our code to " -"some other system where INADDR_ANY is perhaps not a zero, we need to assign " -"it to `sa.sin_addr.s_addr`. Most modern C compilers are clever enough to " -"notice that INADDR_ANY is a constant. As long as it is a zero, they will " -"optimize the entire conditional statement out of the code." +"Its value is `0`. Since we have just used `memset` to set zeroes on the " +"entire structure, it would be redundant to set it to `0` again. But if we " +"port our code to some other system where INADDR_ANY is perhaps not a zero, " +"we need to assign it to `sa.sin_addr.s_addr`. Most modern C compilers are " +"clever enough to notice that INADDR_ANY is a constant. As long as it is a " +"zero, they will optimize the entire conditional statement out of the code." msgstr "" -"Его значение равно `0`. Поскольку мы только что использовали `bzero` для " -"всей структуры, будет избыточным снова устанавливать его в `0`. Но если мы " -"перенесем наш код на другую систему, где INADDR_ANY, возможно, не равен " -"нулю, нам нужно будет присвоить его `sa.sin_addr.s_addr`. Большинство " -"современных компиляторов C достаточно умны, чтобы заметить, что INADDR_ANY — " -"это константа. Пока она равна нулю, они оптимизируют все условное выражение " -"из кода." +"Его значение равно `0`. Поскольку мы только что использовали `memset`, чтобы " +"установить в 0 все байты структуры, будет избыточным снова устанавливать его " +"в `0`. Но если мы перенесём наш код на другую систему, где INADDR_ANY, " +"возможно, не равен нулю, нам нужно будет присвоить его `sa.sin_addr.s_addr`. " +"Большинство современных компиляторов C достаточно умны, чтобы заметить, что " +"INADDR_ANY — это константа. Пока она равна нулю, они оптимизируют все " +"условное выражение из кода." #. type: Plain text #: documentation/content/en/books/developers-handbook/sockets/_index.adoc:810 @@ -2369,8 +2370,8 @@ msgid "" "customary to end the names of daemons with the letter `d`). After you have " "compiled it, try running it:" msgstr "" -"Теперь сохраните приведённый исходный код в файл [.filename]#daytimed.c# (" -"обычно имена демонов оканчиваются буквой `d`). После компиляции попробуйте " +"Теперь сохраните приведённый исходный код в файл [.filename]#daytimed.c# " +"(обычно имена демонов оканчиваются буквой `d`). После компиляции попробуйте " "запустить его:" #. type: delimited block . 4 *** 759 LINES SKIPPED ***home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69b6953f.24de6.c5f073b>
