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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ срСда программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

ИдССй использования ΠΊΠΎΠΌΠ°Π½Π΄ put ΠΈ get ΠΌΡ‹ обязаны систСмС управлСния исходными тСкстами (Source Code Control System β€” SCCS), созданной M. Π ΠΎΡ‡ΠΊΠΈΠ½Π΄ΠΎΠΌ (The Source Code Control System. β€” IEEE Trans, on Software Engineering, 1975). Π­Ρ‚Π° систСма Π±ΠΎΠ»Π΅Π΅ мощная ΠΈ гибкая, Ρ‡Π΅ΠΌ наши простыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; ΠΎΠ½Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для поддСрТания процСсса создания Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Однако основу SCCS составляСт всС Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° diff.

Π“Π»Π°Π²Π° 6

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ использовали ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅, Π½ΠΎ сСйчас ΡƒΠΆΠ΅ достигнут Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π΅Π» Π² создании Π½ΠΎΠ²Ρ‹Ρ… срСдств с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ shell, sed ΠΈ awk. Π’ этой Π³Π»Π°Π²Π΅ Π½Π°ΠΌ прСдстоит Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ простыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС программирования Π‘ΠΈ. ΠžΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π°Ρ философия конструирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… совмСстно, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияниС Π½Π° построСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ наша Ρ†Π΅Π»ΡŒ β€” ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ инструмСнты, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ случаС ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ попытаСмся ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… инструмСнтов: Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ свойства, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ срСдства, Ссли Π² Π½ΠΈΡ… Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ вСскиС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ "с нуля". Π’Π°ΠΊ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ, просто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Часто приходится ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с нСтСкстовыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. НапримСр, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Ρ€Π°Π½Π΅Π΅, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ лишь с тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π»ΠΈΠ±ΠΎ слишком Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Π»Π°ΡΡŒ долТная ΡΡΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ shell ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ срСдства ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаях рСализация с использованиСм shell ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для апробирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅Π΅ интСрфСйса с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. (Если ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈ.) Π£ΠΆΠ΅ знакомая Π²Π°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° zap являСтся Π² этом смыслС Π½Π΅ΠΏΠ»ΠΎΡ…ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ: трСбуСтся всСго нСсколько ΠΌΠΈΠ½ΡƒΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π½Π° shell, которая ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, Π½ΠΎ слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½Π°.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘ΠΈ β€” стандартном языкС систСмы UNIX (ядро ΠΈ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ написаны Π½Π° Π‘ΠΈ), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚ ΠΈΠ½ΠΎΠ³ΠΎ языка, хотя Π±Ρ‹ отчасти Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ этот язык, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π² Ρ‚Π°ΠΊΠΎΠΉ стСпСни, Ρ‡Ρ‚ΠΎΠ±Ρ‹ свободно Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠΌ здСсь ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅. Если это Π½Π΅ Ρ‚Π°ΠΊ, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΊΠ½ΠΈΠ³Ρƒ "Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ" Π‘. ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½Π° ΠΈ Π”. Π ΠΈΡ‚Ρ‡ΠΈ (М.: Ѐинансы ΠΈ статистика, 1985)[13]. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ "стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°" β€” Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘ΠΈ эффСктивными ΠΈ пСрСносимыми срСдствами Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ систСмными услугами. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ…, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ UNIX, систСмах, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π‘ΠΈ, поэтому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, взаимодСйствия с систСмой ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ возмоТностями Ρ‚Π°ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ пСрСнСсСны.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ Π² настоящСй Π³Π»Π°Π²Π΅, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ свойство: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой нСбольшиС "инструмСнты", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ рСгулярно, Π½ΠΎ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ сСдьмой вСрсии систСмы. Если ваша систСма ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ систСмы. Если ΠΆΠ΅ Π²Ρ‹ с Π½ΠΈΠΌΠΈ Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π²Π°ΠΌ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ систСмы Π½Π΅ сущСствуСт, ΠΈ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹, достаточно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΡŒ лишь нСбольшиС усилия

6.1 Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° vis

МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΏΠΈΡˆΡƒΡ‚ Π² ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ: для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ подходят Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ лишь стандартныС Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΈ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, этого ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда достаточно.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ vis, которая ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ свой стандартный Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π² стандартный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ, изобраТая ΠΏΡ€ΠΈ этом всС Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы Π² Π²ΠΈΠ΄Π΅ \nnn, Π³Π΄Π΅ nnn β€” Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа. Vis ΠΏΠΎΠ»Π΅Π·Π½Π° для обнаруТСния "посторонних" ΠΈΠ»ΠΈ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Ρ‹. НапримСр, vis Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ "шаг Π½Π°Π·Π°Π΄" ΠΊΠ°ΠΊ \010, Ρ‡Ρ‚ΠΎ являСтся Π΅Π³ΠΎ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

$ cat x abc

$ vis < x

abc\010\010\010 ___

$

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой элСмСнтарной вСрсии vis, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ cat для сбора Ρ„Π°ΠΉΠ»ΠΎΠ²

$ cat Ρ„Π°ΠΉΠ»1 Ρ„Π°ΠΉΠ»2 ... | vis

...

$ cat Ρ„Π°ΠΉΠ»1 Ρ„Π°ΠΉΠ»2 ... | vis | grep '\\'

...

ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΌ самым выяснСния способа доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ sed, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π° '1' Π²Ρ‹Π΄Π°Π΅Ρ‚ Π½Π° экран Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы Π² наглядном Π²ΠΈΠ΄Π΅:

$ sed -n 1 x

abc←←←___

$

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ sed, вСроятно, Π²Π°ΠΌ покаТСтся яснСС, Ρ‡Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния vis. Но ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ sed ΠΊ нСтСкстовым Ρ„Π°ΠΉΠ»Π°ΠΌ бСссмыслСнно:

$ sed -n 1 /usr/you/bin

$ НичСго Π² ΠΎΡ‚Π²Π΅Ρ‚!

(Π’Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π½Π° PDP-11; Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· систСм для VAX sed Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π²ΠΎΠ΄ Π±Ρ‹Π» воспринят ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ длинная тСкстовая строка.) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, sed Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΈ ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° getchar ΠΈ putchar. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ getchar появляСтся ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ символ ΠΈΠ· стандартного Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ поставлСн Π² соотвСтствиС Ρ„Π°ΠΉΠ», ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΈΠ»ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» (послСднСС принимаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° "Π½Π΅ Π·Π½Π°Π΅Ρ‚", Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΎΠ½ собой прСдставляСт. Аналогично putchar(c) ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ символ Π² стандартный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚Π°ΠΊΠΆΠ΅ связан с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ.

Ѐункция printf(3) выполняСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅. Π’Ρ‹Π·ΠΎΠ²Ρ‹ printf ΠΈ putchar ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π² любом порядкС; Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ порядок этих Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠ³ΠΎ прСобразования Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° прСдусмотрСна функция scanf(3); ΠΎΠ½Π° Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ трСбуСтся, Π½Π° строки, числа ΠΈ Ρ‚.ΠΏ. Π’Ρ‹Π·ΠΎΠ²Ρ‹ scanf ΠΈ getchar Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ vis:

/* vis: make funny characters visible (version 1) */

#include <stdio.h>

#include <ctype.h>


main() {

 int c;


 while ((c = getchar()) != EOF)

  if (isascii(c) &&

   (isprint(с) || c=='\n' || c=='\t' || c==' '))

   putchar(c);

  else

   printf("\\%03o", c);

 exit(0);

}

Getchar Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF, ΠΊΠΎΠ³Π΄Π° встрСчаСт ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° (ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ). ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, EOF Π½Π΅ являСтся Π±Π°ΠΉΡ‚ΠΎΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°; вспомнитС: Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π³Π»Π°Π²Π΅ объяснялось, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ "ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°". Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF отличаСтся ΠΎΡ‚ значСния любого Π±Π°ΠΉΡ‚Π°, поэтому Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ; пСрСмСнная с описана ΠΊΠ°ΠΊ int (цСлая), Π°; Π½Π΅ ΠΊΠ°ΠΊ char (символьная), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF. Π‘Ρ‚Ρ€ΠΎΠΊΠ°

#include <stdio.h>

Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ заставляСт компилятор Π‘ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ (/usr/include/stdio.h), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ спСцифицированы стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π°, Π² Ρ‚ΠΎΠΌ числС ΠΈ EOF. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ <stdio.h> ΠΊΠ°ΠΊ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ запись ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°.

Π€Π°ΠΉΠ» <ctype.h> β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π² /usr/include, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ машинно-нСзависимыС ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (макросы) для классификации символов. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ символ Π½Π°Π±ΠΎΡ€Ρƒ ASCII (Ρ‚.Π΅. Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ мСньшС 0200) ΠΈ пСчатаСтся Π»ΠΈ ΠΎΠ½, ΠΌΡ‹ использовали здСсь isascii ΠΈ isprint. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ макросы пСрСчислСны Π² Ρ‚Π°Π±Π». 6.1. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ <ctype.h> опрСдСляСт символы "ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки", "табуляция" ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΊΠ°ΠΊ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅.

isalpha(c) Π‘ΡƒΠΊΠ²Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ: a-z A-Z isupper(c) ΠŸΡ€ΠΎΠΏΠΈΡΠ½Π°Ρ Π±ΡƒΠΊΠ²Π°: A-Z islower(с) Бтрочная Π±ΡƒΠΊΠ²Π°: a-z isdigit(c) Π¦ΠΈΡ„Ρ€Π°: 0-9 isxdigit(c) ШСстнадцатСричная Ρ†ΠΈΡ„Ρ€Π°: 0-9 a-f A-F isalnum(c) Π‘ΡƒΠΊΠ²Π° ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Π° isspace(c) ΠŸΡ€ΠΎΠ±Π΅Π», символ табуляции, символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, символ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ табуляции, символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° страницы, символ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ispunct(c) НС Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ символ, Π½Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ, Π½Π΅ ΠΏΡ€ΠΎΠ±Π΅Π» isprint(c) ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΉ: любой графичСский символ iscntrl(c) Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ символ: 0 <= с < 040 || с == 0177 isascii(c) Π‘ΠΈΠΌΠ²ΠΎΠ» ASCII: 0 <= с <= 0177

Π’Π°Π±Π»ΠΈΡ†Π° 6.1: ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ классификации символов <ctype.h>