ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ
Π₯Π΅ΠΉ Π₯Π°Π±Ρ! ΠΠΈΡ
ΠΈΡΠΊΠ°Π» Π΄Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ° Π½Π° Π²Π°ΡΠ΅ΡΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΡΡΠ°ΡΠΈΠΈ-ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ Π½Π° Π΅Π΄Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ° - OSTEP. Π’ΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΎΠ±ΡΡΠΆΠ΄Π° Π΄ΠΎΡΡΠ° Π΄ΡΠ»Π±ΠΎΠΊΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ, ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΡΠΈ, ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ ΡΡΠΊ
ΠΠ°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΡΠ΅ΠΌΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΡΠΊ:
ΠΡΡΠ³ΠΈ ΡΠ°ΡΡΠΈ:
Π§Π°ΡΡ 1: ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π§Π°ΡΡ 2: ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ: ΠΡΠΎΡΠ΅ΡΡΡ Π§Π°ΡΡ 3: ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² API Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ ΠΊΠ°Π½Π°Π»Π° ΠΌΠΈ Π½Π°
ΠΠ»Π°ΡΠΌΠ°! ΠΠ° ΡΠ°Π·ΠΈ Π»Π΅ΠΊΡΠΈΡ ΠΈΠΌΠ° Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡ! ΠΠΈΠΆ
API Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΈ
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅Ρ Π² UNIX ΡΠΈΡΡΠ΅ΠΌΠ°. Π’ΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΡΡΠ΅Π· Π΄Π²Π΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π²ΠΈΠ»ΠΈΡΠ° () ΠΈ exec().
Call fork()
ΠΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΏΡΠ°Π²ΠΈ fork() ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅. Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ»Π΅Π΄Π½ΠΈΡΡ.
ΠΡΡΠ²ΠΎ, Π²Π»ΠΈΠ·Π°ΠΌΠ΅ Π²ΡΠ² ΡΡΠ½ΠΊΡΠΈΡΡΠ° main() ΠΈ ΠΎΡΠΏΠ΅ΡΠ°ΡΠ²Π°ΠΌΠ΅ Π½ΠΈΠ·Π° Π½Π° Π΅ΠΊΡΠ°Π½Π°. Π Π΅Π΄ΡΡ ΡΡΠ΄ΡΡΠΆΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΊΠΎΠΉΡΠΎ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° PID ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°. Π’ΠΎΠ·ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² UNIX Π·Π° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅Ρ. Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° fork(). Π ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΠΏΠΎΡΡΠΈ ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°. ΠΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΈΠΌΠ° 2 ΠΊΠΎΠΏΠΈΡ Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ΅ ΠΈΠ·Π»Π΅Π·Π΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ° fork(). ΠΠΎΠ²ΠΎΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡΡ Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ (ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π³ΠΎ Π΅ ΡΡΠ·Π΄Π°Π») Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°, ΠΊΠ°ΡΠΎ ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ° main(). Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΌΠ½ΠΈ, ΡΠ΅ Π΄ΡΡΠ΅ΡΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π΅ Π΅ ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅Ρ; ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΠΎΠΉ ΠΈΠΌΠ° ΡΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ, ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΊΡΠΌ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°, Π²ΡΡΠ½Π°ΡΠ° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ° fork(), ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·Π»ΠΈΡΠ½Π°. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ PID ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π΄ΡΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ ΠΊΠ°ΡΠΎ Π²ΡΡΡΠ°Π½Π΅, Π° Π΄ΡΡΠ΅ΡΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΡΠ°Π²Π½Π° Π½Π° 0. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° Π²ΡΡΡΠ°Π½Π΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΈ Π΄Π° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΡΡ
Π΄Π° Π²ΡΡΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠΈ ΡΠ°Π±ΠΎΡΠ° . ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΎΠ±Π°ΡΠ΅ Π½Π΅ Π΅ ΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈ Π½Π° 2 ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΠ‘ Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° Π³ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΄Π° ΠΏΠ»Π°Π½ΠΈΡΠ° ΡΡΡ
Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ°. ΠΠΊΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ Π½Π° Π΅Π΄Π½ΠΎΡΠ΄ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΠΎΡ, Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅, Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡ, ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΡΡΠ΅ΡΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ». ΠΡΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΡΠΈΡΡΠ°ΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΡΠ°Π·Π»ΠΈΡΠ½Π°.
ΠΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅()
ΠΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. Π ΡΠ°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ ΠΈΠ·ΡΠ°ΠΊΠ°ΠΉΡΠ΅() Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ΅ ΡΠ°ΠΊΠ° Π΄ΡΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π΄Π° Π·Π°Π²ΡΡΡΠΈ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠ΅ΠΊΡΡΠΎΠ² ΠΈΠ·Ρ
ΠΎΠ΄ Π½Π° Π΅ΠΊΡΠ°Π½Π°
ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ exec().
ΠΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅Π»ΡΡΠ²ΠΎΡΠΎ exec(). Π’ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. Π’ΡΠΊ ΡΠ΅ ΡΠ΅ ΠΎΠ±Π°Π΄ΠΈΠΌ execvp() Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° wc, ΠΊΠΎΡΡΠΎ Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π·Π° Π±ΡΠΎΠ΅Π½Π΅ Π½Π° Π΄ΡΠΌΠΈ. ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° exec()? ΠΠ° ΡΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡ ΡΠ°ΠΉΠ» ΠΈ Π½ΡΠΊΠΎΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΊΠ°ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ. Π‘Π»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΊΠΎΠ΄ΡΡ ΠΈ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠΎΠ·ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°Ρ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Ρ ΠΊΠΎΠ΄Π° ΡΠ΅ ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°. ΠΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΠ°ΡΠΎ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ°, ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΎΡΠ½ΠΎΠ²ΠΎ. Π‘Π»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΠ‘ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠ°ΡΠΎ ΠΉ ΠΏΡΠ΅Π΄Π°Π²Π° Π½Π°Π±ΠΎΡ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ. Π’Π°ΠΊΠ° ΡΠ΅ Π½ΠΈΠ΅ Π½Π΅ ΡΡΠ·Π΄Π°Π΄ΠΎΡ
ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΡΠ΅Ρ, Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Ρ
ΠΌΠ΅ ΡΠ΅ΠΊΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π² Π΄ΡΡΠ³Π° ΡΠ°Π±ΠΎΡΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ exec() Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈΠ·ΠΎΠ±ΡΠΎ Π½Π΅ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π°.
Π’ΠΎΠ²Π° ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ Π·Π° Unix shell ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΡΠΎΠ·ΠΈ shell Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π²ΠΈΠ»ΠΈΡΠ° (), Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈ ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ΡΠΎ exec(). ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°ΠΊΡΠ² ΠΊΠΎΠ΄ Π±ΠΈ Π±ΠΈΠ» ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΠΊΡΠΌ Π½ΡΠΆΠ΄ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Ρ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅.
Π§Π΅ΡΡΠΏΠΊΠ° - ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. Π’Ρ Π²ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ΅Π΄Π° Ρ ΠΏΠΎΠΊΠ°Π½ΠΈΡΠ΅ ΠΈ Π²ΠΈ ΡΠ°ΠΊΠ° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π΅ΡΠΎ Π² Π½Π΅Π³ΠΎ. Π ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ, Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΡΠ°ΠΌ, ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄Π° fork() ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° Π½ΡΠΊΠ°ΠΊΡΠ² ΡΠΈΠΏ exec(), Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Π½ΠΎΠ² ΠΏΡΠΎΡΠ΅Ρ ΠΈ Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ° Π΄Π° Π·Π°Π²ΡΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅() ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅. ΠΠΎΠ³Π°ΡΠΎ Π΄ΡΡΠ΅ΡΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΠΈΠ·Π»Π΅Π·Π΅, ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ ΠΎΡ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° wait() ΠΈ ΡΠ΅ ΠΎΡΠΏΠ΅ΡΠ°ΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Π½Π°ΡΠ° ΠΈ ΡΠ΅ ΠΈΠ·ΡΠ°ΠΊΠ° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°.
Π Π°Π·Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° fork() & exec() ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° Π΄Π° ΠΏΡΠ°Π²ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π½Π΅ΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
wc ΡΠ°ΠΉΠ» > Π½ΠΎΠ²_ΡΠ°ΠΉΠ».
Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° wc Π΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ ΡΠ°ΠΉΠ». ΠΠ°ΡΠΈΠ½ΡΡ, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π»ΡΡ ΠΏΠΎΡΡΠΈΠ³Π° ΡΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡ - ΡΡΠ΅Π· ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ exec(), ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° Π·Π°ΡΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄ ΠΈ ΠΎΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Π° Π½ΠΎΠ²_ΡΠ°ΠΉΠ», ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½, ΡΠ΅Π»ΠΈΡΡ ΠΈΠ·Ρ ΠΎΠ΄ ΠΎΡ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½Π°ΡΠ° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° wc ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ ΡΠ°ΠΉΠ» Π²ΠΌΠ΅ΡΡΠΎ ΠΊΡΠΌ Π΅ΠΊΡΠ°Π½.
Unix ΡΡΡΠ±Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½, Ρ ΡΠ°Π·ΠΈ ΡΠ°Π·Π»ΠΈΠΊΠ°, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ pipe(). Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ·Π°Π½ ΠΊΡΠΌ ΠΎΠΏΠ°ΡΠΊΠ° ΠΎΡ ΠΊΠ°Π½Π°Π»ΠΈ, ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π² ΡΠ΄ΡΠΎΡΠΎ, ΠΊΡΠΌ ΠΊΠΎΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ·Π°Π½ Π²Ρ
ΠΎΠ΄Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Π½Π° Π΄ΡΡΠ³ ΠΏΡΠΎΡΠ΅Ρ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com