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 Β«ΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΈ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Β», Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π΄Π»Ρ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ Π Π½Π΅ΠΉ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΠ°Π·Π΄Π΅Π»Ρ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈ Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΏΡΡΠΌΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ ΡΠ°Π±ΠΎΡΠΎΠΉ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π»ΠΈΡΡ Π½ΠΎΠΌΠ΅ΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π½Π΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΏΠΈΠΉ ΡΡΠΏΠ΅ΡΠ±Π»ΠΎΠΊΠ°. ΠΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π΄ΠΈΡΠΊΠΎΠ²ΡΠΉ Π±Π»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ; Π΅Π³ΠΎ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ°ΠΌΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΡΠ»ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ: ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΡΠΈΠΏ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (ΠΡΠΊΠΎΡΠ΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ.)