执行格式: grep string file
例: grep abc file1 查找并列出串abc所在的整行文字 (7)文件或命令的路径寻找
执行格式一:whereis command 显示命令的路径
执行格式二:which command 显示路径及使用者所定义的别名 执行格式三:whatis command 显示命令的功能摘要
执行格式四:find search -path -name filename -print搜寻指定路径下某文件的路径
执行格式五:locate filename
根据系统预先生成的文件/目录数据库(/var/lib/slocate/slocate.db)查找匹配的文件/目录,查找速度很快,如果有刚进行的文件改变而系统未到执行定时更新数据库的时间,可以打入updatedb命令手动更新。 (8)建立文件或目录的链接 ln
例: ln source target1 建立source文件(已存在)的硬链接,命名为target1
ln -s source target2 建立source文件的符号链接,命名为target2
以下是几个常用命令操作的截图:
四、设计思想
当计算机中两个或多个进程在执行时需要使用公用缓冲区,并且对该缓冲区采取了互斥措施。这时如果并发执行这些进程就会造成CPU的极大浪费,这是操作系统设计要求不允许的。而这种现象在操作系统和用户进程中大量存在。因此为了解决这一问题,提出了同步的概念,即把异步环境下的一组并发进程,因直接制约而互相发送消息、互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。
在本次设计中,爸爸与妈妈、儿子与女儿的进程操作是互斥的,但是爸爸与女儿、妈妈与儿子进程之间的操作是同步的。因此要利用进程同步的方法来实现这几者之间的操作,当然其中也包含着互斥进程,因为盘子每次只能放入或取出一个水果。
程序设计中有如下四个进程:father(),mother(),daughter(),son()。
五、数据结构
1、信号量semid_mutex作为进程的公有信号量,其初始值为1,可以实现进程间的互斥,同时可以表示当前状态下盘子里可以放几个水果,实现进程间的同步。 2、信号量semid_full1为进程father()与daughter()的私有信号量,初值为0,表示当前盘子里苹果的数目。
3、信号量semid_full2为进程mother()与son()的私有信号量,初值为0,表示当前盘子里橘子的数目。
六、设计流程
爸爸放苹果流程图:
father操作 semid_mutex<=0 (P(semid_mutex)) 是 否 阻塞father进程 放苹果 唤醒daughter进程 V(semid_full1)
妈妈放橘子流程图:
mother操作 semid_mutex<=0 女儿吃苹果流程图:儿子吃橘子流程图:(P(semid_mutex)) 是 否 阻塞mother进程 放橘子 唤醒son进程 V(semid_full2) daughter操作 semid_full1<=0 (P(semid_full1)) 是 否 阻塞daughter进程 吃苹果 离开临界区 唤醒father进程 V(semid_mutex)
son操作 semid_full2<=0 (P(semid_full2)) 是 否 阻塞son进程 吃橘子 离开临界区 唤醒mother进程 V(semid_mutex)
七、源代码
#include
#define SHMKEY 9090 /*共享存储区的键*/ #define SEMKEY_EMPTY 9091 #define SEMKEY_MUTEX 9092 #define SEMKEY_FULL1 9093
#define SEMKEY_FULL2 9094 /*信号量数组的键*//*注意:上面的键在系统中必须唯一*/ #define BUFF_LEN 5/*缓冲区可以存放10个产品*/
#define PRODUCT_LEN 1 /*每个产品是一个字符串:<=32字符*/
void set_sembuf_struct(struct sembuf *sem,int semnum, int semop,int semflg)