Π€ΡΠ½ΠΊΡΠΈΠΈ Posix Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 0 Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΈ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΡ β1 Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ errno ΡΠ°Π²Π½ΡΠΌ ΠΊΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ Pthread Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ pthread_create Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΠ·-Π·Π° ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ oΠ³ΡaΠ½ΠΈΡeΠ½ΠΈΡ Π½Π° ΠΏΠΎΡΠΎΠΊΠΈ, ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ EAGAIN. Π€ΡΠ½ΠΊΡΠΈΠΈ Pthread Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno. ΠΠ΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ ΠΏΡΠΈ ΠΈΡ Π²ΡΠ·ΠΎΠ²Π΅ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΠ΄ΠΎΠ² ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (<sys/errno.h>).
Π€ΡΠ½ΠΊΡΠΈΡ pthread_joinΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π²ΡΠ·Π²Π°Π² pthread_join. Π‘ΡΠ°Π²Π½ΠΈΠ²Π°Ρ ΠΏΠΎΡΠΎΠΊΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Unix, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ pthread_create Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° fork, a pthread_join β waitpid:
#include <pthread.h>
int pthread_join(pthread_t tid, void **status);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0 Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΡ Ρ Ρ β Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ */
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠ°, Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π°Π½Π°Π»ΠΎΠ³Π° waitpid Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ° β1 Π½Π΅Ρ).
ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ status Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ) ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ status.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_selfΠ£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ pthread_create ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ pthread_join. ΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ·Π½Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ pthread_self:
#include <pthread.h>
pthread_t pthread_self(void);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²ΡΠ·Π²Π°Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° */
ΠΡΠ·ΠΎΠ² pthread_self ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ getpid Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Unix.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_detachΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΠΌ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), ΡΠ°ΠΊ ΠΈ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌ. ΠΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΡΡΠ°ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ pthread_join. ΠΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ-Π΄Π΅ΠΌΠΎΠ½Ρ. ΠΠΎΡΠ»Π΅ Π΅Π³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ. ΠΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π΅Π³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, Π»ΡΡΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_detach Π΄Π΅Π»Π°Π΅Ρ Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌ:
#include <pthread.h>
int pthread_detach(pthread_t tid);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0 Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΡ Ρ Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ */
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠ°ΡΡΡ Π² ΡΠΎΡΠΌΠ΅
pthread_detach(pthread_self());
Π€ΡΠ½ΠΊΡΠΈΡ pthread_exitΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² pthread_exit:
#include <pthread.h>
void pthread_exit(void *status);
/* Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ */
ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌ, Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΡΡΠ°ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ pthread_join.
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ status Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΠ·Π²Π°Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° (ΡΠΈΠΏΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ Π΄Π²ΡΠΌΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
β Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° (ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ pthread_create) ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ return. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΈΠΏ void, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΠ°ΡΡΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°;
β ΡΡΠ½ΠΊΡΠΈΡ main ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ exit ΠΈΠ»ΠΈ _exit. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΠ ΠΠΠΠΠΠΠΠ Π
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ
Π.1. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» unpipc.h
ΠΠΎΡΡΠΈ Π²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» unpipc.h, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ Π.1.[1] ΠΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π½ΡΠΆΠ½ΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Ρ ΠΏpoΠ³ΡaΠΌΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΡΡ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ±ΡΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠΈΠΏΠ° MAXLINE ΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ ANSI Π‘ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ (ΡΠΈΠΏΠ° px_ipc_name), ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΠΊΠ½ΠΈΠ³Π΅ ΠΎΠ±Π΅ΡΡΠΎΠΊ. ΠΡ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΡΡΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ.
ΠΠΈΡΡΠΈΠ½Π³ Π.1. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» unpipc.h//lib/unpipc.h
1 /* ΠΠ°Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ». */
2 #ifndef __unpipc_h
3 #define __unpipc_h
4 #include "../config.h" /* ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΠ‘ */
5 /* "../config.h" ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ configure */
6 /* ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² #include, Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°ΠΉΠ»Ρ
7 ../aclocal.m4 ΠΈ ../configure.in. ΡΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΠ°Π» ΡΡΠ΅Π½Π°ΡΠΈΠΉ configure */
8 #include <sys/types.h> /* Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ */
9 #include <sys/time.h> /* ΡΡΡΡΠΊΡΡΡΠ° timeval{} Π΄Π»Ρ select() */
10 #include <time.h> /* timespec{} Π΄Π»Ρ pselect() */
11 #include <errno.h>
12 #include <fcntl.h> /* ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ */
13 #include <limits.h> /* PIPE_BUF */
14 #include <signal.h>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18 #include <sys/stat.h> /* ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠ΅ΠΆΠΈΠΌΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ S_xxx */
19 #include <unistd.h>
20 #include <sys/wait.h>
21 #ifdef HAVE_MQUEUE_H
22 #include <mqueue.h> /* ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Posix */
23 #endif
24 #ifdef HAVE_SEMAPHORE_H
25 #include <semaphore.h> /* ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Posix */
26 #ifndef SEM_FAILED
27 #define SEM_FAILED ((sem_t *)(-1))
28 #endif
29 #endif
30 #ifdef HAVE_SYS_MMAN_H
31 #include <sys/mman.h> /* ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ Posix */
32 #endif
33 #ifndef MAP_FAILED
34 #define MAP_FAILED ((void *)(-1))
35 #endif
36 #ifdef HAVE_SYS_IPC_H
37 #include <sys/ipc.h> /* System V IPC */
38 #endif
39 #ifdef HAVE_SYS_MSG_H
40 #include <sys/msg.h> /* ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ System V */
41 #endif
42 #ifdef HAVE_SYS_SEM_H
43 #ifdef __bsdi__
44 #undef HAVE_SYS_SEM_H /* ΡΠΎΠ½ΠΊΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ: ΠΏΡΠΎΡΠΎΡΠΈΠΏ semctl() Π² BSDI's ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ*/
45 #else
46 #include <sys/sem.h> /* ΡΠ΅ΠΌΠ°ΡΠΎΡΡ System V */
47 #endif
48 #ifndef HAVE_SEMUN_UNION /* $$.It semun$$ */
49 union semun { /* ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π»Ρ semctl() */
50 int val;
51 struct semid_ds *buf;
52 unsigned short *array;
53 };
54 #endif
55 #endif /* HAVE_SYS_SEM_H */
56 #ifdef HAVE_SYS_SHM_H
57 #include <sys/shm.h> /* ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡΡ System V */
58 #endif
59 #ifdef HAVE_SYS_SELECT_H
60 #include <sys/select.h> /* Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° */
61 #endif
62 #ifdef HAVE_POLL_H
63 #include <poll.h> /* Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° */
64 #endif
65 #ifdef HAVE_STROPTS_H
66 #include <stropts.h> /* Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° */
67 #endif
68 #ifdef HAVE_STRINGS_H
69 #include <strings.h> /* Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° */
70 #endif
71 /* Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π° Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ioctl ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ²:
72 * <sys/ioctl.h>, <sys/filio.h>, ΠΈ <sys/sockio.h>.
73 */
74 #ifdef HAVE_SYS_IOCTL_H
75 #include <sys/ioctl.h>
76 #endif
77 #ifdef HAVE_SYS_FILIO_H
78 #include <sys/filio.h>
79 #endif
80 #ifdef HAVE_PTHREAD_H
81 #include <pthread.h>
82 #endif
83 #ifdef HAVE_DOOR_H
84 #include <door.h> /* ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π²Π΅ΡΠ΅ΠΉ Solaris */
85 #endif
86 #ifdef HAVE_RPC_RPC_H
87 #ifdef _PSX4_NSPACE_H_TS /* Π±Π°Π³ΠΈ Digital Unix 4.0b */
88 #undef SUCCESS
89 #endif
90 #include <rpc/rpc.h> /* Sun RPC */
91 #endif
92 /* ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ bzero() ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΎΡ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π‘ */
93 #ifndef HAVE_BZERO
94 #define bzero(ptr,n) memset(ptr, 0, n)
95 #endif
96 /* Posix.1g ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ INFTIM ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ»ΠΎΡΡ Π² <poll.h>. Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ°
97 ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² <sys/stropts.h>. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΠ΅
98 ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ INFTM Π·Π΄Π΅ΡΡ. ΠΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅
99 Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΉ, ΡΡΠΎ ΠΎΠ½ΠΎ ΡΠ°Π²Π½ΠΎ β1 */
100 #ifndef INFTIM
101 #define INFTIM (-1) /* Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΡΠΎΡΠ° */
102 #ifdef HAVE_POLL_H
103 #define INFTIM_UNPH /* ΡΡΠΎΠ±Ρ ΠΈΠ· ΡΠ°ΠΉΠ»Π° unpxti.h ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° */
104 #endif
105 #endif
106 /* ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ */
107 #ifndef Π ΠΠ’Π_ΠΠΠ₯ /* Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π² <limits.h> */
108 #define PATH_MAX 1024 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° */