UNIXV6shell.c注释.pdf

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UNIXV6shell.c注释

Makefile CC = gcc CFLAGS = -Wall -O2 all: $(CC) $(CFLAGS) -o shell shell.c glob.c $(CC) $(CFLAGS) -o if if.c $(CC) $(CFLAGS) -o goto goto.c clean: rm shell if goto glob.c /* * globals params * * 在 params 中的 * 匹配正则表达式 .* * 在 params 中的 ? 匹配正则表达式 . * 在 params 中的 [...] 匹配字符类 * 在 params 中的 [!...] 匹配字符类的补集。 * 在 params 中的 [...a-z...] 匹配 a 到 z。 * * 执行命令并带有按如下规则构造的参数列表: * 如果 param 不包含 *,[,或 ?,则按原样使用它 * 如果包含,则在当前目录中找到匹配这个 param 的所有文件, * 排序并使用它们。 */ #include stdlib.h #include limits.h #include unistd.h #include dirent.h #include setjmp.h #define QUOTE 0x80 /* 引用标志位 */ #define STRSIZ _POSIX_ARG_MAX static char ab[STRSIZ]; /* 生成的字符串的存储空间 */ static char *string; static char *ava[STRSIZ/2]; /* 生成的参数列表 */ static char **av; static int ncoll; static jmp_buf env; int glob(int argc, char *argv[]); extern int texec(char* f, char **t); static void expand(char *as); static void sort(char **oav); static void toolong(void); static int match(char *s, char *p); static int amatch(char *as, char *ap); static int umatch(char *s, char *p); static int compare(char *as1, char *as2); static char* cat(char *as1, char *as2); int glob(int argc, char *argv[]) { string = ab; av = ava; if (argc 2) { write(STDERR_FILENO, Arg count\n, 10); return 1; } argv++; *av++ = *argv; /* 指向第一个参数,它是要执行的文件的名字 */ if (setjmp(env) != 0) return 1; while (--argc = 2) expand(*++argv); /* 展开余下的所有的参数 */ return texec(ava[0], ava); } void expand(char *as) { register char *s, *cs; struct dirent * dirp; DIR *dp; char **oav; ncoll = 0; s = cs = as; /* 把 cs 定位到第一个通配符 */ while (*cs!=*

您可能关注的文档

文档评论(0)

bodkd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档