我自己反省,每次我读书时所写的学习博客的收获和心得不应该以书名为题目1、2、3.....下去,这样别人不好读我的博客,又不便于我自己从题目一眼看到那次博客的内容,因为我自己的博客有时自己也很有用,需要重新复习或忘记的知识点往往需要从题目中需找到那次学习的内容,所以我从今改了,以博客内容为题目,文中在表明出处.....
我准备学习嵌入式驱动方面的知识了,但是我必须步步为营,把以前linux应用程序设计、ARM系统开发、系统移植和内核开发,这些知识点重新复习。所谓温故而知新嘛....这就是我的性格了、喜欢一步一步踏踏实实的走,因为我的心告诉我要这样,我只听从自己的内心的.....好了好了又啰嗦了,O(∩_∩)O哈哈~,我们先从linux应用程序开始复习吧!
linux应用程序---这个版块的知识很多,也很重要!
先来一个框架性的东西吧,鸟瞰一下.....
(1)shell 程序设计
(2)文件操作
(3)进程和信号
(4)进程间的通信--管道、信号、共享内存
(5)线程
(6)信号量、消息队列
(7)网络编程
shell 程序设计
一.什么是shell?
简单地说,就是命令解释器,将用户输入的指令转换为相应的机器能够运行的程序。
种类:
(1) bourne shell (sh)
(2) korn shell (ksh)
(3) bourne again shell (bash)
(4) c shell (csh 和tcsh)
(5) TENEX/TOPS C shell (tcsh)
Shell脚本
Shen脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件包含的命令序列将得到执行。
二.创建脚本
Shell脚本的第一行必须是如下格式:
#!/bin/sh
符号#!告诉系统同一行上紧跟在他后面的那个参数是用来执行本文件的解析程序。
这个例子中/bin/sh是默认的shell程序。
看下面这个脚本例子:
#!/bin/sh
for file in *
do
if grep -q POSIX $file
then
echo $file
fi
done
exit 0
上例知识点1:因为脚本程序本质上被看做是shell的标准输入,所以他可以包含任何能够通过PATH环境变量引用到的Linux命令。
知识点2:exit 命令的作用是确保脚本程序能够返回一个有意义的退出码,当程序以交互式方式运行时,我们很少需要检查它的退出码,但如果你打算从另一个脚本程序里调用这个脚本程序并查看它是否执行成功,则返回一个适当的退出码就很重要了。即使你重来没有想过你的脚本程序被另一个脚本程序调用,你也应该在退出时返回一个合理的退出码。请相信自己的脚本程序是有用的,它总有一天会作为其他脚本程序的一部分而被重用。
知识点3:在shell程序设计里,0表示成功。
知识点4:上面脚本程序没有任何文件扩展名和后缀。一般情况下,linux和Unix很少用文件扩展名来决定文件类型。我们可以使用.sh来扩展名,但shell并不关心这一点。大多数预安装的脚本程序没用用任何文件扩展名,检查这些文件脚本是否是脚本程序的最好方法是使用file命令,例如:file 文件名 来查看是否是脚本文件。如图:
三.把脚本设置为可执行
上面我们已经有了自己的脚本文件,要想运行它有两种方法:
1.最简答的方法:在调用shell的时候把脚本文件名当成一个参数,如下:
/bin/sh filename
2.通过chmod 改变脚本的执行权限,如下:
chmod +x filename
(笔者最常用的就是更改其权限为777 即:chmod 777 filename 不过这样存在一定的安全性问题)
然后我们可以用下面的命令来执行它:
filename
你可能会看到一条错误信息告诉你未找到命令,这种情况很可能发送,因为shell环境变量PATH没有设置为当前目录下查找要执行的命令。要解析这个问题,一种办法是在命令航上直接输入命令PATH=$PATH:. 或者编辑你的.bash_profile文件,将刚才这条命令添加到文件末尾,然后退出登录后再重新登录进来。另外,也可以在保存脚本程序的目录中输入命令./filename ,该命令的作用是把脚本程序的完整的相对路径告诉shell.
用./来指定路径还有另一个好处,它能够保证不会意外执行系统中与你的脚本文件同名的另一个命令。