;2;实验一 Linux 基本命令的使用
1、实验目的 学习和掌握 Linux 的基本命令。 2、实验内容和步骤
步骤 1:以 user_login 用户身份并使用telnet 登录 Linux 服务器,按照提示创建自己的账 户和口令。
步骤 2:使用新创建的用户账户和口令登录 Linux 系统,察看登录后的界面。 ;步骤 4:在当前目录下建立一个名为 test 的新目录,然后将工作目录切换到 test 下,尝试 将/etc 目录下的文件 passwd 拷贝到该目录下(cp 源文件 目的目录)。察看当前目录下的 passwd 文件的属主和文件权限。 ;步骤 7:用 rm 命令删除 test 目录下的所有文件,再用 rmdir 命令删除 test 目录。 (想 一想有没有一条命令将目录及目录下的所有文件删除,写出这条命令) ;步骤 11:使用 free 命令查看内存资源的使用情况,记录结果。;;8;;echo};步骤 3:仔细观察这两个程序,比较标准 C 的文件操作和 Linux 的系统调用 open、read、write等的使用区别。
答:标准 c 的文件操作一个是库函数的调用,linux 中系统调用文件操是底层的文件调用,其 运行效率略有差距,同时参数也不同,返回的数据类型也不同。
步骤 4:按照说明重新修改程序 3-2,并使用 time 命令察看程序执行的时间效率上有何区别。 ;实验四 Linux 下进程操作与进程间通信
1、实验目的
学习和掌握 fork 等系统调用的基本使用方法。 利用 Linux 中的管道实现父子进程间的同步。
2、实验内容与步骤
步骤 1:使用 Vi 将程序清单 4-1 的程序输入、编译并运行,学习和掌握 fork 的基本调用方 法。
步骤 2:使用 Vi 将程序清单 4-2、4-3 和 4-4 的程序输入、利用 gcc 分别编译这三个程序, 写出编译命令和编译结果,如果不成功,尝试利用 gdb 调试。 gcc -o list4_2 list4_2.c gcc -o father father.c gcc -o child child.c 步骤 3:写出编译这三个程序的 makefile,然后利用 make 进行编译,谈谈这么做的好处。 可以节省劳动时间,让三个程序同时编译,简化了操作。
步骤 4:运行这三个程序,写出运行结果。 ;13;Thread joined
步骤 5:仔细研读代码,描述利用信号量实现线程间同步调用方法。
定义一个全局的sem_t类型的变量,通过函数sem_init(&bin_sem,0,0)初始化???号量,sem_wait 函数相当于P操作,sem_post函数相当于V操作,改程序的实质其实是一个生产者消费者问 题。注:int sem_init(sem_t *sem, int pshared, unsigned int value);The value argument specifies the initial value for the semaphore.If pshared has the value 0, then the semaphore is shared between the threads of a process. If pshared is nonzero, then the semaphore is shared between processes.
步骤6:学习并使用线程间的同步方法,重新改写实验3步骤6要求的程序。要求启用两个线 程,其中主线程接受用户对文件stu.info的操作命令然后发给子线程,子线程完成对文件的 实际操作(注意线程间的同步)。 3、实验结论通过本节实验学习了如何创建线程,如何在线程之间传递参数已经共享数据,以及如何利 用信号量同步线程。如何在线程之间传递参数已经共享数据,以及如何利用信号量同步线 程。
实验六 Linux 进程间的 IPC
1、实验目的 学习和掌握 Linux 进程间的 IPC 及同步方法。 2、实验内容和步骤
步骤 1:输入程序 6-1,6-2 编译并运行写出执行结果。 ;步骤 2:仔细研读代码,写出程序中实现 P、V 操作的相关函数和代码,描述程序的同步工 作过程。上述代码实现多个进程读写临界区时,使用信号量进行同步的例子,读临界区时先 P 操作, 出临界后V 操作,上面结果中O 与X 的出现都是成队的。
步骤 3:输入程序 6-3 和 6-4,编译执行并写出结果。 ; childno int(11) not null auto_increment,
fname varchar(3