7.2. ΠΠΎΠ΄ V7
lsΠ€Π°ΠΉΠ»
/usr/src/cmd/ls.c1Β /*2Β Β * ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ3Β Β */45Β #include <sys/param.h>6Β #include <sys/stat.h>7Β #include <sys/dir.h>8Β #include <stdio.h>910 #define NFILES 102411 FILE *pwdf, *dirf;12 char stdbuf[BUFSIZ];1314 struct lbuf { /* Π‘ΠΎΠ±ΠΈΡΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ */15Β union {16Β Β char lname[15];17Β Β char *namep;18Β } ln;19Β char ltype;20Β short lnum;21Β short lflags;22Β short lnl;23Β short luid;24Β short lgid;25Β long lsize;26Β long lmtime;27 };2829 int aflg, dflg, lflg, sflg, tflg, uflg, lflg, fflg, gflg, cflg;30 int rflg = 1;31 long year; /* ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ 0 */32 int flags;33 int lastuid = -1;34 char tbuf[16];35 long tblocks;36 int statreq;37 struct lbuf *flist[NFILES];38 struct lbuf **lastp = flist;39 struct lbuf **firstp = flist;40 char *dotp = ".";4142 char *makename(); /* char *makename(char *dir, char *file); */43 struct lbuf *gstat(); /* struct lbuf *gstat(char *file, int argfl); */44 char *ctime(); /* char *ctime(time_t *t); */45 long nblock(); /* long nblock(long size); */4647 #define ISARG 0100000ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² (ΡΡΡΠΎΠΊΠΈ 5β8) ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
struct lbufstruct statlsΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
aflgdflgflistlastpfirstplsΠΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ΄ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΡΡΠΎΠΊΠΈ 42β45), Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
ISARG49 main(argc, argv) /* int main(int argc, char **argv) */50 char *argv[];51Β {52Β int i;53Β register struct lbuf *ep, **ep1; /* ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ */54Β register struct lbuf **slastp;55Β struct lbuf **epp;56Β struct lbuf lb;57Β char *t;58Β int compar();5960Β setbuf(stdout, stdbuf);61Β time(&lb.lmtime); /* ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ */62Β year = lb.lmtime - 6L*30L*24L*60L*60L; /* 6 ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄ */Π€ΡΠ½ΠΊΡΠΈΡ
main()Llong63Β Β if (--argc > 0 && *argv[1] == '-') {64Β Β Β argv++;65Β Β while (*++*argv) switch(**argv) { /* Π Π°Π·Π±ΠΎΡ ΠΎΠΏΡΠΈΠΉ */6667Β Β case 'a': /* ΠΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° */68Β Β Β Β aflg++;69Β Β Β continue;7071Β Β case 's': /* Π Π°Π·ΠΌΠ΅Ρ Π² Π±Π»ΠΎΠΊΠ°Ρ
*/72Β Β Β sflg++;73Β Β Β statreq++;74Β Β Β Β continue;7576Β Β Β case 'd': /* Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ */77Β Β Β dflg++;78Β Β Β continue;7980Β Β case 'g': /* ΠΠΌΡ Π³ΡΡΠΏΠΏΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° */81Β Β Β gflg++;82Β Β Β continue;8384Β Β case 'l': /* Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π»ΠΈΡΡΠΈΠ½Π³ */85Β Β Β lflg++;