编程笔记
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-17
1. 管道和两次重定向是否等价?
一般情况下,我们说这两个操作能够实现同样的功能.
>> ls > aaa
grep XXX < aaa
rm aaa
>> ls | grep XXX
在这个时候,两种操作是等价的,甚至管道要好一些,不需要考虑文件aaa是否存在.但是需要注意的是,管道操作相当于建立子Shell,因此不改变原来Shell的变量.比如
>> a = origin
cat file | read a
echo $a
输出结果依然是origin.而如果采用重定向的方法,就会改变a的值.例程中有
>> cat file | while read a
do
echo $a
done
回显时候,并没有出管道的子Shell,因此可以显示出File保存的内容.与上面一个例子不同.
2. 脚本中的空格问题.
和一般C编程很不一样,有的脚本对运算符左右的空格要求非常严格,不小心多一个空格或者少一个空格,就会报错.比如,在SHELL脚本中,if后面的条件,如果是采用[]的写法,括号左右加空格,比如
>>if [ -f "$file" ]
就是正确语句,而如果按照下面的写法,就有可能报错(测试的时候报的是词法错误).
>>if [ -f "$file"]
再举个例子,是模块的脚本.在2.6的内核下,自己编写的模块,脚本中需要用M=指出该模块的位置.而M=中间不能加空格,而=后面也最好不要加空格.否则make不能通过.
3. 内核栈大小
在内核中不要声明比较大的数组,内核栈非常小.x86体系结构中,32位系统是4K,64位系统是8K.如果声明了比较大的数组,在引用的时候,很可能造成内存错误,然后系统就崩溃了.(调试的时候,居然把make例程给搞坏了!要么就是OS panic!)这样的程序放在用户态是正确的,逻辑上是正确的,于是此时内核的panic就往往摸不到头脑.一定要注意!
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: linux 构建DHCP服务器及配置下一篇: linux用户改密码提示错误passwd: User not known to the underlying authentication module
关于编程笔记的所有评论