全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
继续分析shell例程代码,再次遇到了一个陌生的库函数strchr。
1. 从这里看,这个是一个库函数无疑了。
2. 这个函数,或者说这三个函数主要的功能是确认一个字符在字符串中的位置。
3. 从函数原型上,这个设计的确是让我觉得有点蒙圈。在UNIX的设计中,感觉int类型似乎到了滥用的地步。
4. strchr的作用是查找一个字符在字符串中的位置,找不到返回NULL;而strrchr则是反向查找,找不到返回NULL;strchrnul依然是正向的查找但是如果找不到不再返回NULL而是返回字符串最后的位置。
Strchrnull是GNU的一个扩展,这也就意味着上面提到额度BSD等一系列的标准实现中可能是不包含的。
基于此,这个函数的实现其实就很容易理解了。Peek做了什么呢?如果知道一个字符串,并且知道字符串结束的位置。Peek会跳过字符串中的空白,这是上面第一个strchr的作用,用来甄别空白字符。甄别处理的过程中,peek其实是会直接修整原始的字符串。假如,这样的操作结束后字符串不是空,并且字符串的第一个字符是toks字符串的子集,那么返回1,否则返回0。
接下来,对peek进行一个简单的测试。
可以用这种方式测试一组信息,并且打印展示出来所有的中间状态。
设计了一组测试,进行了几种不同的信息peak测试。
test started:
string: abcd123
toks:fedcba
after peek.
string:abcd123
test finished and return value:1
test started:
string: 1234
toks:fedcba
after peek.
string:1234
test finished and return value:0
test started:
string:abcd123
toks:fedcba
after peek.
string:abcd123
test finished and return value:1
test started:
string:1234
toks:fedcba
after peek.
string:1234
test finished and return value:0
test started:
string:
toks:fedcba
after peek.
string: abcd123
test finished and return value:0
test started:
string: abcd123
toks:43210
after peek.
string:abcd123
test finished and return value:0
test started:
string: 1234
toks:43210
after peek.
string:1234
test finished and return value:1
test started:
string:abcd123
toks:43210
after peek.
string:abcd123
test finished and return value:0
test started:
string:1234
toks:43210
after peek.
string:1234
test finished and return value:1
test started:
string:
toks:43210
after peek.
string: abcd123
test finished and return value:0
通过上面的测试记录看,测试还是很符合预期的。