β Π€Π»Π°Π³ NI_DGRAM Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°Π΄Π°Π½, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ. ΠΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ getnameinfo Π·Π°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ IP-Π°Π΄ΡΠ΅Ρ ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° Π² ΡΡΡΡΠΊΡΡΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΠΎΠ½Π° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» (TCP ΠΈΠ»ΠΈ UDP). Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΠΏΠΎΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ TCP Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ, Π° Π² ΡΠ»ΡΡΠ°Π΅ UDP Π΄Π»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΎΠΉ. ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΠΏΠΎΡΡ 514, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠ»ΡΠΆΠ±ΠΎΠΉ rsh Π² TCP ΠΈ ΡΠ»ΡΠΆΠ±ΠΎΠΉ syslog Π² UDP.
β Π€Π»Π°Π³ NI_NAMEREQD ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΈΠΌΡ ΡΠ·Π»Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ DNS. ΠΡΠΎΡ ΡΠ»Π°Π³ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ IP-Π°Π΄ΡΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π±ΡΠ»ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ ΠΈΠΌΡ ΡΠ·Π»Π°. ΠΠ°ΡΠ΅ΠΌ ΡΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ ΡΠ·Π»Π°, Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ gethostbyname ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Π»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΈΡ Π΄Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΎΡΡ Π±Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎ.
β Π€Π»Π°Π³ NI_NOFQDN Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ·Π»Π°, ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Ρ Π²ΡΠ΅, ΡΡΠΎ ΠΈΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΡΡΡΡΠΊΡΡΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ IP-Π°Π΄ΡΠ΅Ρ 192.168.42.2, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ gethostbyaddr Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ ΠΈΠΌΡ aix.unpbook.com. ΠΠΎ Π΅ΡΠ»ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ getnameinfo Π·Π°Π΄Π°Π½ ΡΠ»Π°Π³ NI_NOFQDN, ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΠ·Π»Π° ΡΠΎΠ»ΡΠΊΠΎ aix.
β Π€Π»Π°Π³ NI_NUMERICHOST ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ getnameinfo, ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ DNS (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ). ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ inet_ntop. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΠ»Π°Π³ NI_NUMERICSERV ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ»ΡΠΆΠ±Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°. ΠΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΠ²Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΡΠΎΡ ΡΠ»Π°Π³, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΡΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ»ΡΠΆΠ±Ρ β ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌΡΠ΅ ΠΏΠΎΡΡΡ. NI_NUMERICSCOPE ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΎΠ±Π»Π°ΡΡΠΈ Π² ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌ, Π° Π½Π΅ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅.
ΠΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π°Π³ΠΎΠ² ΠΏΡΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΈΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ NI_DGRAM ΠΈ NI_NUMERICHOST.
11.18. Π€ΡΠ½ΠΊΡΠΈΠΈ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅
Π€ΡΠ½ΠΊΡΠΈΡ gethostbyname ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 11.3 ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΅ΡΠ΅ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ: ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ (nonreentrant). ΠΡ Π΅ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½Π΅ΠΌΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Π³Π»Π°Π²Π΅ 23, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ, Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠ»ΠΈ ΠΌΡ ΠΈΠ·ΡΡΠΈΠΌ Π΅Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΡΠΎ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ BIND ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½), ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΎΠ±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ β ΠΈ gethostbyname, ΠΈ gethostbyaddr β ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
static struct hostent host; /* Π·Π΄Π΅ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ */
struct hostent*
gethostbyname(const char *hostname) {
return(gethostbyname2(hostname, family));
}
struct hostent*
gethostbyname2(const char *hostname, int family) {
/* Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ DNS Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π ΠΈΠ»ΠΈ AAAA */
/* Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠ·Π»Π° */
return(&host);
}
struct hostent*
gethostbyaddr(const char *addr, size_t len, int family) {
/* Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ DNS Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° PTR Π² Π΄ΠΎΠΌΠ΅Π½Π΅ in-addr.arpa */
/* Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠ·Π»Π° */
return(&host);
}
ΠΡ Π²ΡΠ΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° ΠΏΠ°ΠΌΡΡΠΈ static ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² Π½Π΅ΠΌ. Π’ΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΡΠΈ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ host, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΡΡΠ³ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π² ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ 11.1. (ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΡΠ°Π±Π». 11.4.) Π€ΡΠ½ΠΊΡΠΈΡ gethostbyname2 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² BIND 4.9.4 Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ IPv6. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ gethostbyname, Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ gethostbyname2, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π² Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Unix, Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ gethostbyname ΠΈΠ»ΠΈ gethostbyaddr ΠΈ ΠΈΠ· ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΠΈ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΈΠ³Π½Π°Π»Π°. ΠΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π° (Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ ΡΠΈΠ³Π½Π°Π» SIGALRM, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ), Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π°. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ:
main() {
struct hostent *hptr;
...
signal(SIGALRM, sig_alrm);
...
hptr = gethostbyname( ... );
...
}
void
sig_alrm(int signo) {
struct hostent *hptr;
...
hptr = gethostbyname( ... );
...
}
ΠΡΠ»ΠΈ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ gethostbyname (Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ»Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ host ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ΅ΠΉΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅), Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ gethostbyname, ΡΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ host, ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ½ΠΎΠ²Π°. ΠΡΠΈ ΡΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΈΠ³Π½Π°Π»Π°.
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΠΈ Π°Π΄ΡΠ΅ΡΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΈ Π² Π³Π»Π°Π²Π΅ 9, Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ inet_XXX ΠΈΠ· Π³Π»Π°Π²Ρ 4, ΠΌΡ Π·Π°ΠΌΠ΅ΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
β Π€ΡΠ½ΠΊΡΠΈΠΈ gethostbyname, gethostbyname2, gethostbyaddr, getservbyname ΠΈ getservbyport ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (Solaris 2.x), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΠΈ ΡΡΠΈΡ ΡΠ΅ΡΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΎΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΠΌΠΈΡΡ ΡΡΡΡΠΈΠΊΡΠΎΠΌ _r. Π Π½ΠΈΡ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Digital Unix 4.0 ΠΈ HP_UX 10.30) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΠΈ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
β Π€ΡΠ½ΠΊΡΠΈΠΈ inet_pton ΠΈ inet_ntop Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅.
β ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΡ inet_ntoa Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΡ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠΎΠΈΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
β Π€ΡΠ½ΠΊΡΠΈΡ getaddrinfo Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠΎ Π΅ΡΡΡ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ gethostbyname ΠΈΠ»ΠΈ getservbyname Π΄Π»Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ·Π»Π° ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ»ΡΠΆΠ±Ρ. ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Π²ΡΡ ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ.
β Π€ΡΠ½ΠΊΡΠΈΡ getnameinfo Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ Π΅ΡΡΡ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ gethostbyaddr Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ·Π»Π° ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ getservbyport Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ»ΡΠΆΠ±Ρ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ±Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΡ ΡΡΡΠΎΠΊΠΈ (Π΄Π»Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ·Π»Π° ΠΈ Π΄Π»Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ»ΡΠΆΠ±Ρ) ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ.
ΠΠΎΡ ΠΎΠΆΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno. ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΠΎΡΠΈΠ±ΠΊΡ, ΡΠΎ Π² ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ close ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ·ΡΠΊΠ° Π‘ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
β ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° (ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ) Π² ΡΠ΅Π³ΠΈΡΡΡ;
β ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ, ΡΡΠΎ Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ close;
β Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² (ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° ΡΠ΄ΡΠΎ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ);
β ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°;
β Π΅ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ (0);
β ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno;
β Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ (-1).
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠΎΠΊΠ° ΠΌΡ Π½Π΅ ΡΠ·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° (ΠΎΠ±ΡΡΠ½ΠΎ Π½Π° ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ -1).
ΠΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ close ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
if (close(fd) < 0) {
fprintf(stderr, "close error, errno = $d\n", errno);
exit(1);
}
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno Π² ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΡΠΎ Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²) ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno. ΠΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ close ΠΈ fprintf ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΠΎΡΠΈΠ±ΠΊΡ (Π΄ΠΎΠΏΡΡΡΠΈΠΌ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ write), ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ close, Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ write.