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

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

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

β€’ Π‘вСдСния ΠΎ часовом поясС доступны Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² tzset(). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ стандартныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ tzset(), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² нСпосрСдствСнном Π²Ρ‹Π·ΠΎΠ²Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π΅Π΄ΠΊΠΎ.

β€’ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ для сортировки массивов являСтся qsort(). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сравнСния ΠΈ принимая ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ числа элСмСнтов массива ΠΈ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, qsort() ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ обСспСчиваСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ.

β€’ scandir() Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π² массив struct dirent ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² массив ΠΈ для обСспСчСния упорядочСния элСмСнтов Π² массивС ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСдоставлСнныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ alphasort() являСтся стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ для сортировки элСмСнтов ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ; scandir() ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сортировки прямо Ρ‡Π΅Ρ€Π΅Π· qsort().

β€’ Π€ΡƒΠ½ΠΊΡ†ΠΈΡ bsearch() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ qsort(). Она осущСствляСт быстрый Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π΅, Ссли Ρ†Π΅Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска ΠΏΠ΅Ρ€Π΅Π²Π΅ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ†Π΅Π½Ρƒ сортировки Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…. (Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ API для поиска ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… описан Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 14.4 Β«Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ поиск с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²Β».)

β€’ Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π³Ρ€ΡƒΠΏΠΏ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π½Π° локальном дискС ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступны Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ API Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ скрываСт это Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅. КаТдая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… обСспСчиваСт ΠΊΠ°ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ просмотр всСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ нСпосрСдствСнныС запросы ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ/Π³Ρ€ΡƒΠΏΠΏΡ‹.

β€’ ΠΠ°ΠΊΠΎΠ½Π΅Ρ†, для Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° нСдостаточно простого stat(), isatty() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ, прСдставляСт Π»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„Π°ΠΉΠ» устройство Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

УпраТнСния

1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ date, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС строку Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π΅ для форматирования ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

2. ΠšΠΎΠ³Π΄Π° Ρ„Π°ΠΉΠ» ΡΡ‚Π°Ρ€ΡˆΠ΅ ΡˆΠ΅ΡΡ‚ΠΈ мСсяцСв, 'ls -l' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ измСнСния Π±ΠΎΠ»Π΅Π΅ простой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. GNU вСрсия Ρ„Π°ΠΉΠ»Π° ls.c ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ вычислСниС:

3043 /* ВрСмя считаСтся Π½Π΅Π΄Π°Π²Π½ΠΈΠΌ, Ссли ΠΎΠ½ΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… послСдних 6

3044    мСсяцСв. Π’ Григорианском Π³ΠΎΠ΄Π΅ 365.2425 * 24 * 60 * 60 ==

3045    31556952 сСкунд Π² срСднСм. Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ

3046    Ρ†Π΅Π»ΡƒΡŽ константу для избСТания трудностСй с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.*/

3047    six_months_ago = current_time - 31556952 / 2;

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это с нашим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ вычислСния ΡˆΠ΅ΡΡ‚ΠΈ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… мСсяцСв. ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства ΠΈ нСдостатки ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²?

3. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ touch, которая измСняСт врСмя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя

4. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ touch ΠΎΠΏΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС значСния Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² качСствС Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

5. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ своСй вСрсии touch Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΎΠΏΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ врСмя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΎΠ΅ врСмя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

6. Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ ch06-sortemp.c Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° сортировала ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½Π° массив сотрудников.

7. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ ch06-sortdir.c ΠΎΠΏΡ†ΠΈΠΈ для сортировки ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ индСкса, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ доступа ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Β«ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΡ†ΠΈΡŽΒ», Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ основанная Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сортировка ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π»Π° самый Π½Π΅Π΄Π°Π²Π½ΠΈΠΉ Ρ„Π°ΠΉΠ», Π° ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ критСриям (Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, индСксу) ΠΏΠΎΠΌΠ΅Ρ‰Π°Π»Π° Π²Π½Π°Ρ‡Π°Π»Π΅ наибольшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

8. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ chown. Она Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ:

chown ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ[:Π³Ρ€ΡƒΠΏΠΏΠ°] Ρ„Π°ΠΉΠ»Ρ‹ ...

Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡƒ для ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π“Ρ€ΡƒΠΏΠΏΠ° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°; Ссли ΠΎΠ½Π° присутствуСт, ΠΎΠ½Π° отдСляСтся ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Π²Π΅Ρ€ΡΠΈΡŽ Π½Π° систСмС GNU/Linux, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС root. Π”Π΅Π»Π°ΠΉΡ‚Π΅ это остороТно!

9. Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ свою chown, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ использованиС числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ наряду с ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

10. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для копирования структур ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Для выдСлСния памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈ нСобходимости malloc().

11. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ поиска ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, которая считываСт Π² динамичСски выдСляСмый массив всю Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ быстрый поиск ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠ°ΠΊ ΠΏΠΎ ID, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ. Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ случая, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.

12. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ.

13. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ stat, которая ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ содСрТимоС struct stat для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Она Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ всС значСния Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для восприятия Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ: значСния time_t Π² Π²ΠΈΠ΄Π΅ Π΄Π°Ρ‚ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, значСния uid_t ΠΈ gid_t Π² Π²ΠΈΠ΄Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌΠ΅Π½ (Ссли ΠΎΠ½ΠΈ доступны), Π° Ρ‚Π°ΠΊΠΆΠ΅ содСрТимоС символичСских ссылок. Π’Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅ st_mode Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹Π²Π΅Π»Π° Π±Ρ‹ ls.

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ stat GNU Coreutils ΠΊΠ°ΠΊ ΠΏΠΎ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ исходному ΠΊΠΎΠ΄Ρƒ.

Π“Π»Π°Π²Π° 7

БоСдиняя всС вмСстС: ls

Команда V7 ls Ρ…ΠΎΡ€ΠΎΡˆΠΎ связываСт Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ всС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎ сих ΠΏΠΎΡ€ Π²ΠΈΠ΄Π΅Π»ΠΈ. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всС API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрСли, затрагивая ΠΌΠ½ΠΎΠ³ΠΈΠ΅ аспСкты программирования Unix: Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти, Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΈ Π΄Π°Ρ‚Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ сортировку.

7.1. ΠžΠΏΡ†ΠΈΠΈ V7 ls

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с соврСмСнными вСрсиями ls, V7 ls ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ лишь нСбольшоС количСство ΠΎΠΏΡ†ΠΈΠΉ, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ… для V7 отличаСтся ΠΎΡ‚ значСния для соврСмСнной ls. Π­Ρ‚ΠΈ ΠΎΠΏΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

-Π° Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ всС элСмСнты ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π‘Π΅Π· Π½Π΅Π΅ '.' ΠΈ '..' Π½Π΅ выводятся. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ интСрСсно, V7 ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ лишь '.' ΠΈ '..', Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ с V1 ΠΏΠΎ V6 игнорируСтся любой Ρ„Π°ΠΉΠ», имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся с Ρ‚ΠΎΡ‡ΠΊΠΈ. Π­Ρ‚ΠΎ послСднСС являСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ для соврСмСнных вСрсий ls.

-n Π’мСсто Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для -t ΠΈΠ»ΠΈ -l врСмя измСнСния индСкса.

-d Π”ля Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ свСдСния ΠΎ самом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π° Π½Π΅ ΠΎ Π΅Π³ΠΎ содСрТимом.

-f Β«Π—аставляСт» Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠ°ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ слотС имя. Π­Ρ‚Π° опция ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ -l, -r, -s, -t ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ -Π°. (Π­Ρ‚Π° опция, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, сущСствуСт для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ исправлСния Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.)

-g Π”ля 'ls -l' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ вмСсто ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ имя Π³Ρ€ΡƒΠΏΠΏΡ‹.

-i Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ столбцС Π½ΠΎΠΌΠ΅Ρ€ индСкса вмСстС с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ листингом.

-l ΠžΡΡƒΡ‰Π΅ΡΡ‚вляСт ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Π΄Π»ΠΈΠ½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ V7 'ls -l' Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»Π° лишь имя Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, Π° Π½Π΅ ΠΈΠΌΠ΅Π½Π° Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ вмСстС.

-r Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ порядок сортировки, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ для ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

-s Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² 512-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ…. Бправочная страница V7 ls(1) ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ (indirect blocks) β€” Π±Π»ΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой для обнаруТСния Π±Π»ΠΎΠΊΠΎΠ² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² β€” Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ вычислСнии, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ.

-t Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ вмСсто ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, сначала Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅.

-u Π‘ опциями -t ΠΈ/ΠΈΠ»ΠΈ -l ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ врСмя доступа вмСсто Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. НаибольшиС различия ΠΌΠ΅ΠΆΠ΄Ρƒ V7 ls ΠΈ соврСмСнной ls Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΡ†ΠΈΡŽ -Π° ΠΈ ΠΎΠΏΡ†ΠΈΡŽ -l. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ систСмы ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ всС Ρ„Π°ΠΉΠ»Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π° -Π°, ΠΈ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ листинг -l ΠΈΠΌΠ΅Π½Π° ΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹. На соврСмСнных систСмах -g ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ лишь ΠΈΠΌΠ΅Π½ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, Π° -o ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ лишь ΠΈΠΌΠ΅Π½ΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°. Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ GNU ls ΡΠ²Ρ‹ΡˆΠ΅ 50 ΠΎΠΏΡ†ΠΈΠΉ!

7.2. Код V7 ls

Π€Π°ΠΉΠ» /usr/src/cmd/ls.c Π² дистрибутивС V7 содСрТит ΠΊΠΎΠ΄. Π’Π΅ΡΡŒ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 425 строк.

1  /*

2   * пСрСчисляСт Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ

3   */

4

5  #include <sys/param.h>

6  #include <sys/stat.h>

7  #include <sys/dir.h>

8  #include <stdio.h>

9

10 #define NFILES 1024

11 FILE *pwdf, *dirf;

12 char stdbuf[BUFSIZ];

13

14 struct lbuf { /* Π‘ΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ свСдСния */

15  union {

16   char lname[15];

17   char *namep;

18  } ln;

19  char ltype;

20  short lnum;