1.6. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ: ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ
Π Π»ΡΠ±ΠΎΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ (wrapper functions), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ. Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ-ΠΎΠ±Π΅ΡΡΠΎΠΊ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ°ΠΌΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π±ΡΠΊΠ²Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅Π»Π°Π΅ΡΡΡ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
Sem_post(ptr);
ΠΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.1[1]
ΠΠΈΡΡΠΈΠ½Π³ 1.1. Π€ΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±Π΅ΡΡΠΊΠ° ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ sem_post// lib/wrapunix.c
387 void
388 Sem_post(sem_t *sem)
389 {
390 if (sem_post(sem) == β1)
391 err_sys("sem_post error");
392 }
ΠΡΠ»ΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΡΠ΅ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅Π΅ΡΡ Ρ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡΠΊΠ²Ρ, Π·Π½Π°ΠΉΡΠ΅: ΡΡΠΎ Π½Π°ΡΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±Π΅ΡΡΠΊΠ°. ΠΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌΡΡ ΡΠΎ ΡΡΡΠΎΡΠ½ΠΎΠΉ Π±ΡΠΊΠ²Ρ. Π€ΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±Π΅ΡΡΠΊΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ.
ΠΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠ½ΠΈΠ³Ρ, ΠΌΡ Π²ΡΠ΅Π³Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, sem_post), Π° Π½Π΅ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Sem_post). ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π² Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΌΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π° Π½Π΅ ΠΎΠ±Π΅ΡΡΠΎΠΊ ΠΊ Π½ΠΈΠΌ.
ΠΠ ΠΠΠΠ§ΠΠΠΠ
ΠΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅. ΠΡΠ΅ Π½Π΅ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π½ΡΠΌΠ΅ΡΡΡΡΡΡ. Π’Π΅ΠΊΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»Ρ ΠΊΠΎΠ΄Π°, Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΠΊ Π½Π° ΠΏΡΡΡΠΎΠΌ ΠΏΠΎΠ»Π΅ ΡΠ»Π΅Π²Π°. ΠΠ½ΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄ Π°Π±Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΊΡΠ°ΡΠΊΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π½Π°Π±ΡΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ, ΠΈΠ·Π»Π°Π³Π°ΡΡΠΈΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΠ΄Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠΌΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ β ΡΡΠΎ ΡΠ°ΠΉΠ» wrapunix.c Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ lib. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ (ΡΠΌ. ΠΏΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ». ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΡΠ΅Π½ΠΈΡ ΠΊΠ½ΠΈΠ³ΠΈ β Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ·ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
Π₯ΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ, Π²Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΡ Π² Π³Π»Π°Π²Π΅ 7, Π³Π΄Π΅ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ (thread functions) Π½Π΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Unix errno ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ; Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ pthread ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΡΠ΄Π΅Π»ΡΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π² Π½Π΅ΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno ΡΠ°Π²Π½ΡΠΌ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ err_sys (Π»ΠΈΡΡΠΈΠ½Π³ Π.4). Π§ΡΠΎΠ±Ρ Π½Π΅ Π·Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π°ΡΡ ΡΠ΅ΠΊΡΡ ΡΠΈΠ³ΡΡΠ½ΡΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ Β«Π·Π°ΠΏΡΡΠ°ΡΒ» (comma) ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno ΠΈ Π²ΡΠ·ΠΎΠ² err_sys Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅, ΠΊΠ°ΠΊ Π² Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
int n;
if ((n = pthread_mutex_lock(&ndone_mutex))!=0) errno=n, err_sys("pthread_mutex_lock error");
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ, Π·Π°ΠΏΠΈΡΠ°Π²
Pthread_mutex_lock(&ndone_mutex);
Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π°ΡΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±Π΅ΡΡΠΊΠ°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.2.
ΠΠΈΡΡΠΈΠ½Π³ 1.2. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±Π΅ΡΡΠΊΠΈ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_mutex_lock//lib/wrappthread.c
125 void
126 Pthread_mutex_lock(pthread_mutex_t *mptr)
127 {
128 int n;
129 if ((n=pthread_mutex_lock(mptr))==0)
130 return;
131 errno=n;
132 err_sys("pthread_mutex_lock error");
133 }
ΠΠ ΠΠΠΠ§ΠΠΠΠ
ΠΠΊΠΊΡΡΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° Π‘ΠΈ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΠΎ Π±Ρ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½ΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ ΡΠ΅Π΄ΠΊΠΎ Π±ΡΠ²Π°ΡΡ (Π΅ΡΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π±ΡΠ²Π°ΡΡ) ΡΠ·ΠΊΠΈΠΌ ΠΌΠ΅ΡΡΠΎΠΌ.
ΠΠ°ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π·Π°ΠΌΠ΅Π½Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π±ΡΠΊΠ²Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Π·Π°Π³Π»Π°Π²Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠΌ. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΡΠΌ Π·Π°ΠΏΠΈΡΠΈ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° Π΅ ([10, Ρ. 182]), ΡΡΡΡΠΈΠΊΡΠ° _Π΅ ΠΈ Ρ. Π΄. ΠΠ°Ρ Π²Π°ΡΠΈΠ°Π½Ρ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ ΠΎΡΠ²Π»Π΅ΠΊΠ°ΡΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π°ΡΡΠΈΠΌ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ Π΄ΡΡΠ³Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ: ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ close ΠΈ pthread_ mutex_lock.
ΠΠ°Π»Π΅Π΅ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ²Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΎΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠ½ΠΈΠ³Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠ±Π΅ΡΡΠΎΠΊ, Π½ΠΎ ΠΎΠ½ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ (ΡΠΌ. ΠΏΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅).
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ errno
ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Unix Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ Π½Π° ΡΠΈΠΏ ΠΎΡΠΈΠ±ΠΊΠΈ; ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β1. ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ err_sys Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΊΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Resource temporarily unavailable β ΡΠ΅ΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, β Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ errno ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ EAGAIN).
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ. Π ΡΠ»ΡΡΠ°Π΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ. ΠΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈΠ· Π·Π°Π³Π»Π°Π²Π½ΡΡ Π±ΡΠΊΠ², Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌΠΈΡΡ Ρ Π, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ ΠΎΠ±ΡΡΠ½ΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ <sys/errno.h>. ΠΡΡΡΡΡΡΠ²ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ errno. ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°Π΄Π°Π΅ΡΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ βD_REENTRANT ΠΈΠ»ΠΈ βD_POSIX_C_SOURCE=199506L ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ . Π§Π°ΡΡΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ <errno.h> ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ errno ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΎΡ, ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΠΌΡΠΉ Π² Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° _REENTRANT. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΏΠΈΠΈ errno, ΠΎΡΠ½ΠΎΡΡΡΠ΅ΠΉΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ.
ΠΠ°Π»Π΅Π΅ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Β«ΡΡΠ½ΠΊΡΠΈΡ mq_send Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ EMSGSIZEΒ», ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠ΅, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ (ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π²Π½ΠΎ β1) ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
1.7. Π‘ΡΠ°Π½Π΄Π°ΡΡΡ Unix
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ Unix ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Posix ΠΈ The Open Group.
Posix
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ Posix ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΎ ΠΎΡ Β«Portable Operating System InterfaceΒ», ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Β«ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΒ». ΠΡΠΎ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΡΡΠ°Π½Π΄Π°ΡΡ, Π° ΡΠ΅Π»ΠΎΠ΅ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΠΠ½ΡΡΠΈΡΡΡΠΎΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΏΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΡΠ΅Ρ Π½ΠΈΠΊΠ΅ ΠΈ ΡΠ°Π΄ΠΈΠΎΡΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠ΅ (Institute for Electrical and Electronics Engineers β IEEE). Π‘ΡΠ°Π½Π΄Π°ΡΡΡ Posix Π±ΡΠ»ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ½ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² ISO (International Organization for Standardization, ΠΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ) ΠΈ IEC (International Electrotechnical Commission, ΠΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½Π°Ρ ΡΠ»Π΅ΠΊΡΡΠΎΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠΌΠΈΡΡΠΈΡ), ΠΈΠ»ΠΈ ISO/IEC. Π‘ΡΠ°Π½Π΄Π°ΡΡΡ Posix ΠΏΡΠΎΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π΄ΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
β Π‘ΡΠ°Π½Π΄Π°ΡΡ IEEE 1003.1-1988 (317 ΡΡΡΠ°Π½ΠΈΡ) Π±ΡΠ» ΠΏΠ΅ΡΠ²ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Posix. ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ» ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ·ΡΠΊΠ° Π‘ Ρ ΡΠ΄ΡΠΎΠΌ Unix-ΡΠΈΠΏΠ° Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΎΠ±Π»Π°ΡΡΡΡ : ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (Π²ΡΠ·ΠΎΠ²Ρ fork, exec, ΡΠΈΠ³Π½Π°Π»Ρ ΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΡ), ΡΡΠ΅Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²), ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ (Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°), ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠΌ, Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ (ΡΠ°ΠΉΠ»Ρ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ ΠΈ Π³ΡΡΠΏΠΏ), ΡΠΎΡΠΌΠ°ΡΡ Π°ΡΡ ΠΈΠ²ΠΎΠ² tar ΠΈ cpio.
ΠΠ ΠΠΠΠ§ΠΠΠΠ
ΠΠ΅ΡΠ²ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ Posix Π²ΡΡΠ΅Π» Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ IEEEIX Π² 1986 Π³ΠΎΠ΄Ρ. ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ Posix Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π ΠΈΡΠ°ΡΠ΄ΠΎΠΌ Π¨ΡΠΎΠ»ΠΌΠ°Π½ΠΎΠΌ (Richard Stallman).
β ΠΠ°ΡΠ΅ΠΌ Π²ΡΡΠ΅Π» ΡΡΠ°Π½Π΄Π°ΡΡ IEΠΠ 1003.1-1990 (356 ΡΡΡΠ°Π½ΠΈΡ). ΠΠ½ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΠ»ΡΡ ΠΈ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ISO/IEC 9945-1:1990. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 1988 Π³ΠΎΠ΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π²Π΅ΡΡΠΈΠΈ 1990 Π³ΠΎΠ΄Π° Π±ΡΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ. Π Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ: Β«Part 1: System Application Program Interface (API) [C Language]Β» (Β«Π§Π°ΡΡΡ 1: Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (API) [Π―Π·ΡΠΊ Π‘])Β», ΠΈ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π»ΠΎ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (API) ΡΠ·ΡΠΊΠ° Π‘.
β IEEE 1003.2-1992 Π²ΡΡΠ΅Π» Π² Π΄Π²ΡΡ ΡΠΎΠΌΠ°Ρ ΠΎΠ±ΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ ΠΎΠΊΠΎΠ»ΠΎ 1300 ΡΡΡΠ°Π½ΠΈΡ, ΠΈ Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΡΡΡΠΎΠΊΡ Β«Part 2: Shell and UtilitiesΒ» (Π§Π°ΡΡΡ 2: Β«ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΈ ΡΡΠΈΠ»ΠΈΡΡΒ»). ΠΡΠ° ΡΠ°ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ»Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ (ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Bourne shell Π² Unix System V) ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΡΡΠ° ΡΡΠΈΠ»ΠΈΡ (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° β ΠΎΡ awk ΠΈ basename Π΄ΠΎ vi ΠΈ ΡΠ°ΡΡ). Π Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΡΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Posix. 2.
β IEEE 1003.1b-1993 (590 ΡΡΡΠ°Π½ΠΈΡ) ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ» ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΠΊ IEEE P1003.4. ΠΡΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ» ΡΠΎΠ±ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΡ 1003.1-1990 ΠΈ Π²ΠΊΠ»ΡΡΠ°Π» ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π³ΡΡΠΏΠΏΠΎΠΉ Π 1003.4: ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (scheduling), ΡΠ°ΡΡ, ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.