Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 8

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

АдрСсноС пространство (ΠΏΠ°ΠΌΡΡ‚ΡŒ) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса ΠΎΡ‚Π΄Π΅Π»Π΅Π½Π° ΠΎΡ‚ адрСсного пространства всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… процСссов. Если Π΄Π²Π° процСсса Π½Π΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈΡΡŒ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΠ΄ΠΈΠ½ процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° адрСсноС пространство Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ; это обСспСчиваСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности ΠΈ надСТности систСмы. (Π’ цСлях эффСктивности, систСма раздСляСт исполняСмый ΠΊΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΡ€Π°Π²ΠΎΠΌ доступа Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΌΠ΅ΠΆΠ΄Ρƒ всСми процСссами, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ²ΡˆΠΈΠΌΠΈ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.)

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ β€” это ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‚ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с '

/
'). Π­Ρ‚ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ '
cd <i>someplace</i>
'.

По соглашСнию, всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ с трСмя ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ: стандартным Π²Π²ΠΎΠ΄ΠΎΠΌ, стандартным Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈ стандартной ошибкой. Π­Ρ‚ΠΎ мСста, ΠΎΡ‚ΠΊΡƒΠ΄Π° принимаСтся Π²Π²ΠΎΠ΄, ΠΊΡƒΠ΄Π° направляСтся Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΊΡƒΠ΄Π° Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… соотвСтствСнно. На протяТСнии этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… доступными для ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… процСссов; ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ процСсс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ посрСдством ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ соглашСния, Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния.

ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ прСдставляСт собой Π½Π°Π±ΠΎΡ€ строк, каТдая Π² Π²ΠΈΠ΄Π΅ '

имя=Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
'. Для запроса ΠΈ установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ процСссы Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ своих Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ PATH ΠΈ ΠΠžΠœΠ•. МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для управлСния своим ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈ значСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ процСсс Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ своСго сущСствования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ мноТСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ВсС устанавливаСмыС систСмой Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, PID ΠΈ Ρ‚.Π΄.) ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ самыми, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ «запуска Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса» ΠΎΡ‚ Β«Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для запуска» являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Unix. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ эти Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΈ ΠΈΡ… слоТнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

1.2.1. ΠšΠ°Π½Π°Π»Ρ‹: сцСплСниС процСссов

Π‘Π΅Π· сомнСния, Π²Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ('

|
') ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для соСдинСния Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Канал дСйствуСт ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ„Π°ΠΉΠ»Ρƒ: ΠΎΠ΄ΠΈΠ½ процСсс записываСт Π² Π½Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ записи, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс считываСт ΠΈΠ· Π½Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ) Π½Π΅ Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ являСтся ΠΊΠ°Π½Π°Π»ΠΎΠΌ, Π° Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ.

Как ядро скрываСт «магию» для устройств, заставляя ΠΈΡ… Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ„Π°ΠΉΠ»Π°ΠΌ, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Π΅Ρ‚ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ для ΠΊΠ°Π½Π°Π»ΠΎΠ², принимая ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ΅ записи Π² ΠΊΠ°Π½Π°Π» ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ΅ чтСния, ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… чтСния Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠ°Π½Π°Π»Π°ΠΌ слуТит ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ для связывания Π·Π°ΠΏΡƒΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ; Π½Π΅ трСбуСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ΠžΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ ΠΈ простота Ρ€Π°Π±ΠΎΡ‚Ρ‹: Π½ΠΈΠΊΠ°ΠΊΠΈΡ… особых случаСв для ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

1.3. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π‘ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π‘

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π»Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π‘ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π‘Ρ€Π°ΠΉΠ°Π½Π° ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½Π° ΠΈ ДСнниса Π ΠΈΡ‡ΠΈ Β«Π―Π·Ρ‹ΠΊ программирования Π‘Β» (Brian Kernighan & Dennis Ritchie, The Π‘ Programming Language). Π­Ρ‚Π° ΠΊΠ½ΠΈΠ³Π° описала Π‘, ΠΊΠ°ΠΊ ΠΎΠ½ сущСствовал для Unix ΠΈ Π½Π° систСмах, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ пСрСнСсли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Bell Labs. На протяТСнии Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Β«ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π‘Β», хотя ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ являСтся Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Β«Π‘ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½Π° ΠΈ Π ΠΈΡ‡ΠΈΒ» (Β«K&R Π‘Β»), ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ Π΄Π²ΡƒΡ… Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠ½ΠΈΠ³ΠΈ. (ДСннис Π ΠΈΡ‡ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Π‘.)

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ISO Π‘ 1990 Π³. [17] Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π» опрСдСлСния языка, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ

printf()
ΠΈ
fopen()
). ΠšΠΎΠΌΠΈΡ‚Π΅Ρ‚ ΠΏΠΎ стандартам Π‘ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π» Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ стандартизации ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Π» ввСдСния Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй, с ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ (ΠΈ нСсколькими Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ). НаиболСС Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π±Ρ‹Π»ΠΎ использованиС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, заимствованных ΠΎΡ‚ Π‘++.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ языки программирования Π‘, C++ ΠΈ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для объявлСний ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ описываСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ число ΠΈ Ρ‚ΠΈΠΏ Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°ΠΌΠΈ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ОбъявлСниС

extern int myfunc(struct my_struct *a,

Β struct my_struct *b, double c, int d);

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

int myfunc(struct my_struct *a,

Β struct my_struct *b, double c, int d) {

Β ...

}

...

struct my_struct s, t;

int j;

...

/* Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС: */

j = my_func(&amp;s, &amp;t, 3.1415, 42);

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Но рассмотритС ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²:

j = my_func(-1, -2, 0);

/* ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ число ΠΈ Ρ‚ΠΈΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² */

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ сразу ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ этот Π²Ρ‹Π·ΠΎΠ² ΠΊΠ°ΠΊ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ. Однако, Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π΅Π· указания списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

extern int myfunc();

/* Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ нСизвСстны */

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅Π»ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° int ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΠΈ Ссли функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int, Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ:

myfunc(a, b, с, d); /* Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ int*/

struct my_struct *Π°, *b;

double с;

/* ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π΅Ρ‚ объявлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° d*/

{

Β ...

}

РассмотритС снова Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: '

j = my_func(-1, -2 , 0);
'. Π’ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π‘ Ρƒ компилятора Π½Π΅Ρ‚ возмоТности ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ (ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ, ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ) ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ
my_func()
ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ приводят ΠΊ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ устранимым ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния (Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ ошибки сСгмСнтации, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ), ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ Π±Ρ‹Π»Π° создана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Unix
lint
.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, хотя ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΡ‚Ρ…ΠΎΠ΄ΠΎΠΌ ΠΎΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² посчитали слишком Π²Π°ΠΆΠ½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· Π½Π΅Π΅, ΠΈ послС нСбольшого сопротивлСния ΠΎΠ½Π° Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² язык.

Для Π‘ стандарта 1990 Π³. ΠΊΠΎΠ΄, написанный Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС, являСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ°ΠΊ для объявлСний, Ρ‚Π°ΠΊ ΠΈ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ строк ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компилятора, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ стандарту. Новый ΠΊΠΎΠ΄, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ написан с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ·-Π·Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹Ρ… возмоТностСй ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ошибок Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компилирования.