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

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

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

391   else if (cflg)

392    rep->lmtime = statb.st_ctime;

393   else

394    rep->lmtime = statb.st_mtime;

395   tblocks += nblock(statb.st_size);

396  }

397  return(rep);

398 }

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 356–396 ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π²Ρ‹Π·ΠΎΠ² stat(). Если это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ Ссли statreq установлСн Π² true благодаря ΠΎΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠ΄ заполняСт struct lbuf ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

β€’ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 357–366: Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ stat(), ΠΏΡ€ΠΈ Π΅Π΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ выводится сообщСниС ΠΎΠ± ошибкС с установкой ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π·Π°Ρ‚Π΅ΠΌ возвращаСтся NULL (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² Π²ΠΈΠ΄Π΅ 0).

β€’ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 367–368: ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π² struct stat поля Π½ΠΎΠΌΠ΅Ρ€Π° индСкса ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ссли Π²Ρ‹Π·ΠΎΠ² stat() Π±Ρ‹Π» ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ.

β€’ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 369–384: ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ особыС случаи ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… устройств. Π’ΠΎ всСх случаях ΠΊΠΎΠ΄ обновляСт ΠΏΠΎΠ»Π΅ ltype. Для устройств Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ lsize замСщаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ st_rdev.

β€’ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 385–388. Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ поля lflags, luid, lgid ΠΈ lnl ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ Π² struct stat. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 385 удаляСт Π±ΠΈΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π°, оставляя 12 Π±ΠΈΡ‚ΠΎΠ² ΠΏΡ€Π°Π² доступа (Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись/исполнСниС для Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°/Π³Ρ€ΡƒΠΏΠΏΡ‹/ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ setuid, setgid ΠΈ save-text).

β€’ Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 389–394: ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° опциях ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² struct stat для поля lmtime Π² struct lbuf.

β€’ Π‘Ρ‚Ρ€ΠΎΠΊΠ° 395: обновляСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ tblocks числом Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅.

400 compar(pp1, pp2) /* int compar(struct lbuf **pp1, */

401 struct lbuf **pp1, **pp2; /* struct lbuf **pp2) */

402 {

403  register struct lbuf *p1, *p2;

404

405  p1 = *pp1;

406  p2 = *pp2;

407  if (dflg==0) {

408   if (p1->lflags&ISARG && p1->ltype=='d') {

409    if (!(p2->lflags&ISARG && p2->ltype=='d'))

410     return(1);

411   } else {

412    if (p2->lflags&ISARG && p2->ltype=='d')

413     return(-1);

414   }

415  }

416  if (tflg) {

417   if(p2->lmtime == p1->lmtime)

418    return(0);

419   if (p2->lmtime > p1->lmtime)

420    return(rflg);

421   return(-rflg);

422  }

423  return(rflg * strcmp(p1->lflags&ISARG ? p1->ln.namep : p1->ln.lname,

424   p2->lflags&ISARG ? p2->ln.namep : p2->ln.lname));

425 }

Ѐункция compar() сТата: Π² нСбольшом пространствС происходит ΠΌΠ½ΠΎΠ³ΠΎΠ΅. ΠŸΠ΅Ρ€Π²Π°Ρ Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, это смысл Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния: ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ, ноль ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π²Π½Ρ‹, Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ls Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² послС вывСдСния свСдСний ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сортировки Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, слСдовали Π·Π° всСми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΌ ΠΆΠ΅

НаконСц, пСрСмСнная rflg ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ -r, которая мСняСт порядок сортировки. Она инициализируСтся 1 (строка 30). Если -r ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, rflg устанавливаСтся Π² -1 (строки 89–91).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ псСвдокод описываСт Π»ΠΎΠ³ΠΈΠΊΡƒ compar(); Π½ΠΎΠΌΠ΅Ρ€Π° строк Π½Π° Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌ строк ls.c:

407 if ls Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ # dflg == 0

408  if p1 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ p1 ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

409   if p2 Π½Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ Π½Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

410    return 1 # ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ΄Π΅Ρ‚ послС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ

      else

       ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° тСст Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

411  else

      # p1 Π½Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

412   if p2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

413    return -1 # ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ

      else

       ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° тСст Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

416 if сортировка основана Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ # tflg Ρ€Π°Π²Π½ΠΎ true

     # ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π°:

417  if врСмя p2 Ρ€Π°Π²Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ p1

418   return 0

419  if врСмя p2 > Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ p1

420   return Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ rflg (ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅)

     # врСмя p2 < Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ p1

421  return ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ rflg Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅)

423 Π£ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ rflg Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ strcmp()

424 для Π΄Π²ΡƒΡ… ΠΈΠΌΠ΅Π½ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

АргумСнты strcmp() Π² строках 423–424 выглядят ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ с Ρ‚ΠΎΠ»ΠΊΡƒ. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΎ Π»ΠΈ имя Ρ„Π°ΠΉΠ»Π° ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΈΠ»ΠΈ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ объСдинСния ln Π² struct lbuf.

7.3. РСзюмС

β€’ V7 ls являСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, хотя ΠΎΠ½Π° Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ аспСкты программирования Unix β€” Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ², содСрТаниС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, значСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹, сортировку ΠΈ динамичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

β€’ ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ внСшним Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ V7 ls ΠΈ соврСмСнной ls являСтся Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²ΠΊΠ° ΠΎΠΏΡ†ΠΈΠΉ -Π° ΠΈ -l. Π£ вСрсии V7 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС ΠΎΠΏΡ†ΠΈΠΉ, Ρ‡Π΅ΠΌ Ρƒ соврСмСнных вСрсий; Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ нСдостатком являСтся отсутствиС рСкурсивной ΠΎΠΏΡ†ΠΈΠΈ -R.

β€’ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ flist являСтся чистым способом использования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ памяти Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ PDP-11, прСдоставляя Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС свСдСний, struct lbuf Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ свСдСния ΠΈΠ· struct stat; это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄. Код для Π²Ρ‹Π²ΠΎΠ΄Π° дСвяти Π±ΠΈΡ‚ΠΎΠ² доступа ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ ΠΈ элСгантСн.

β€’ ΠΠ΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части ls ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ малСнькиС Π»ΠΈΠΌΠΈΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° числа Ρ„Π°ΠΉΠ»ΠΎΠ² Π² 1024 ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° Π² makename() Π² 100.

УпраТнСния

1. Π Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getname(). Π§Ρ‚ΠΎ случится, Ссли Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ ID Ρ€Π°Π²Π΅Π½ 256, Π° Π² /etc/passwd Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ строки, Π² этом порядкС:

joe:xyzzy:2160:10:Joe User:/usr/joe:/bin/sh

jane:zzyxx:216:12:Jane User:/usr/jane:/bin/sh

2. Π Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ makename(). ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sprintf() для составлСния ΠΈΠΌΠ΅Π½ΠΈ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅Ρ‚?

3. Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ строки 319–320 Π² readdir() Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ?

4. Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ stat, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ написали Π² качСствС упраТнСния Π² «УпраТнСниях» ΠΊ Π³Π»Π°Π²Π΅ 6. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ nblock() ΠΈΠ· V7 ls ΠΈ Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вмСстС с ΠΏΠΎΠ»Π΅ΠΌ st_blocks ΠΈΠ· struct stat. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹.

5. ΠšΠ°ΠΊ Π±Ρ‹ Π²Ρ‹ ΠΎΡ†Π΅Π½ΠΈΠ»ΠΈ V7 ls ΠΏΠΎ Π΅Π΅ использованию malloc()? (Подсказка: ΠΊΠ°ΠΊ часто вызываСтся free()? Π“Π΄Π΅ Π΅Π΅ слСдовало Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ?)

6. ΠšΠ°ΠΊ Π²Ρ‹ ΠΎΡ†Π΅Π½ΠΈΠ»ΠΈ Π±Ρ‹ ΡΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° V7 ls? (Подсказка: сколько Ρ‚Π°ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²?)

7. ΠžΡ‡Π΅Ρ€Ρ‚ΠΈΡ‚Π΅ шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ V7 ls для соврСмСнных систСм.

Π“Π»Π°Π²Π° 8

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Ρ‹ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²

Данная Π³Π»Π°Π²Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ обсуТдСниС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Linux (ΠΈ Unix). Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ опишСм, ΠΊΠ°ΠΊ ΠΊ логичСскому пространству ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы добавляСтся (ΠΈ удаляСтся) Ρ€Π°Π·Π΄Π΅Π» диска, содСрТащий Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈ Π·Π½Π°Ρ‚ΡŒ, Π½ΠΈ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ мСстС физичСского размСщСния Ρ„Π°ΠΉΠ»Π°, вмСстС с API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ систСмами

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опишСм, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ иСрархичСскому пространству ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ ΠΊΠ°ΠΊ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ (Π΄Π΅Ρ€Π΅Π²ΡŒΡ) ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ nftw(). НаконСц, ΠΌΡ‹ опишСм спСциализированный, Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΉ систСмный Π²Ρ‹Π·ΠΎΠ² chroot().

8.1. ΠœΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм

Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ иСрархичСскоС пространство ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² являСтся большим достоинством Π΄ΠΈΠ·Π°ΠΉΠ½Π° Linux/Unix. Π”Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» рассматриваСт, ΠΊΠ°ΠΊ административныС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ опСрационная систСма ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ для построСния пространства ΠΈΠΌΠ΅Π½ ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… физичСских устройств, содСрТащих Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ слуТСбныС Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ².

8.1.1. ΠžΠ±Π·ΠΎΡ€ основ

Π’ Π³Π»Π°Π²Π΅ 5 Β«ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΈ слуТСбныС Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Β», Π±Ρ‹Π»ΠΈ прСдставлСны индСксы для слуТСбных Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ описано, ΠΊΠ°ΠΊ элСмСнты ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² с индСксами Π’ Π½Π΅ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ описаны Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы, ΠΈ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ прямыС ссылки ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ содСрТат лишь Π½ΠΎΠΌΠ΅Ρ€Π° индСксов, Π° послСдниС Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ срСди всСго Π½Π°Π±ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм.

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