欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    linux实验报告(2)30389.pdf

    • 资源ID:79391891       资源大小:1.10MB        全文页数:28页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    linux实验报告(2)30389.pdf

    Linux 实验报告 姓 名 黄芳恺 班 级 软件工程 114 学 号 8 指导教师 阮越 目录 实验一 Linux 基本命令的使用 实验二 简单 Shell 程序设计 实验三 Linux 下简单 C 程序设计与文件操作 实验四 Linux 下进程操作与进程间通信 实验五 Linux 线程的使用 实验六 Linux 进程间的 IPC 实验七 Linux 下访问 Mysql 数据库 实验八 Linux 下网络编程 练习题:grep、bash、生产者消费者 实验一 Linux 基本命令的使用 1、实验目的 学习和掌握 Linux 的基本命令。2、实验内容和步骤 步骤 1:以 user_login 用户身份并使用 telnet 登录 Linux 服务器,按照提示创建自己的账户和口令。步骤 2:使用新创建的用户账户和口令登录 Linux 系统,察看登录后的界面。步骤 3:使用 pwd 命令察看当前的工作目录,然后用 ls 命令查看当前目录下的内容,尝试使用-a,-l,-F,-A,-lF 等不同选项并比较不同之处。-a do not ignore entries starting with -I,-ignore=PATTERN do not list implied entries matching shell PATTERN-l use a long listing format -F,-classify append indicator(one of*/=|)to entries -A,-almost-all do not list implied.and.-lF ignore file 步骤 4:在当前目录下建立一个名为 test 的新目录,然后将工作目录切换到 test 下,尝试将/etc 目录下的文件 passwd 拷贝到该目录下(cp 源文件 目的目录)。察看当前目录下的passwd 文件的属主和文件权限。步骤 5:尝试向当前目录下的 passwd 文件和/etc/passwd 文件分别写入一些新内容(可使用echo“字符串”文件的命令),看看操作能否成功,如果不能成功,请说明原因。用 cat命令浏览文件 password 的内容,用 more 命令进行浏览翻页操作,再用 less 命令浏览文件的内容。比较这几个命令的不同之处 对当前目录中成功,因为该目录下的 passwd 文件对当前用户具有写的权限。对/etc/passwd文件的操作被拒绝因为对当前用户不具有写的权限 cat 命令将文件的内容全部显示,more 命令将文件内容分屏显示,less 命令进行刷新的全部显示 步骤 6:用 ls 命令查看 test 下文件的权限,用 mv 命令更改文件 password 的文件名为,尝试用 chown 和 chgrp 更改文件的属主为 root、组为 root,看看能否成功,不成功,请说明原因。尝试用 chomd 将文件权限为“-rw-”。看看能否成功,不成功,请说明原因。用 chown 和 chgrp 更改文件的属主为 root、组为 root,不成功。因为 chown 和 chgrp 一般是 root 的权限 步骤 7:用 rm 命令删除 test 目录下的所有文件,再用 rmdir 命令删除 test 目录。(想一想有没有一条命令将目录及目录下的所有文件删除,写出这条命令)rm-rf test 步骤 8:使用 ps 命令查看当前系统内的进程,并利用 man 命令获取 ps 命令的参数,写出获取当前终端进程执行情况的 ps 命令。步骤 9:使用 df 命令查看当前系统已安装的文件系统的空间使用情况,记录结果。步骤 10:使用 du 命令查看用户的工作目录占用了多少空间,记录结果。步骤 11:使用 free 命令查看内存资源的使用情况,记录结果。步骤 12:使用 man 获取 tar 和 gzip 的帮助信息,尝试将 test 目录下的文件打包并压缩,然后到另外一目录 tmp 下解包,写出这几条命令。步骤 13:尝试执行“ls l tmp”,看看这条命令的执行会出现什么结果,解释一下这条命令。创建一个名为 tmp 的文件并将 ls-l 输出的内容写入 tmp 中 步骤 14:尝试执行 find/usr/src-name*.c-print|xargs grep“#include”,看看这条命令的执行会出现什么结果,解释一下这条命令。匹配查找列表输出/usr/src 下以.c 结尾的文件中含有“#include”的内容 步骤 15:执行 cal 和 date 命令,说说这两条指令的用途。步骤 16:执行命令 clear 和 logout,退出系统。(想一想有没有其他的方法,写出这种方法)Exit 步骤 17:执行命令 shutdown,关闭系统。(想一想有没有更简单的命令,写出这条命令)Init 0 3、实验结论 通过对 linux 的常用命令的学习,让我对 linux 的系统有了初步的认识-这是一个完全基于命令操作的操作系统,这些命令组成了强大的命令系统,提供了完善的功能。这些命令操作将为我以后的 linux 学习打下良好的基础。实验二 简单 Shell 程序设计 1、实验目的 (1)学习和掌握 vi 编辑器的基本使用方法。(2)学习和掌握编写简单的 shell 程序。2、实验内容和步骤 vi 的使用 步骤 1:以 root 用户身份登录进入 Linux 系统。步骤 2:启动 Vi,切换到输入模式,输入一段英文:This ia an exercise!We use Vi to edit it.Left,down,up,right 步骤 3:尝试匹配其中的一串字符,写出这命令及执行结果。:/Left 步骤 4:尝试替换其中的一串字符,写出这命令及执行结果。:3s/Left/123/g 步骤 5:尝试复制/删除其中的一行或几行文本,写出命令及执行结果。命令模式下,光标移动到那一行按”nyy”(n为要复制的行数)再按p粘贴。命令模式下,光标移动到那一行按”ndd”(n为要删除的行数)删除一行或几行。步骤 6:尝试复制/删除其中的一个单词或几个字符,写出命令及执行结果。命令模式下,光标移动到那一行按”nyw”(n为要复制的单词数)再按p粘贴。命令模式下,光标移动到那一行按”ndw”(n为要删除的单词数)删除一个或几个字符。步骤 7:尝试使用鼠标复制文本,写出命令及执行结果。直接使用鼠标选中复制,将光标移动到要粘贴的地方用鼠标粘贴即可完成复制文本。步骤 8:尝试存盘退出操作,写出命令。:wq 简单的 shell 程序 步骤 1:使用 Vi 将程序清单 2-1 的程序输入。步骤 2:尝试运行该程序,如果不能运行,原因是什么,怎样修改。没有执行权限 chmod+x test 步骤 3:执行程序,写出程序的执行结果。步骤 4:阅读程序,掌握 shell 函数的编写方法,补全函数 file_run。file_run()ls-l|awk/-(.x)+/print$9 步骤 5:修改程序中的函数 uers(),使得显示在线用户时不分行。(提示:可以使用循环,对每个在线用户分别处理。)uers()echo there are who|wc-l users online echo who are for i in$(who|awk print$1);do printf%s$i done echo 3、实验结论 Linux 系统 shell 编程其本质就是 linux 命令的组合,通过许多简单命令的组合可以完成很多功能,可以开发一些小型程序。实验三 Linux 下简单 C 程序设计与文件操作 1、实验目的 (3)学习和掌握 gcc 等 Linux 的开发调试环境。(4)学习并掌握 Linux 的文件操作。(5)编写并实现实验步骤 6 要求的程序。2、实验内容和步骤 步骤 1:使用 Vi 将程序清单 3-1 和 3-2 的程序输入,并在当前目录下创建文件“”和文件“”,尽可能的使文件“”大一些。步骤 2:利用 gcc 分别编译这两个程序,写出编译命令和执行结果,如果不成功,尝试利用gdb 调试。gcc o list3_1 gcc o list3_2 步骤 3:仔细观察这两个程序,比较标准 C 的文件操作和 Linux 的系统调用 open、read、write等的使用区别。答:标准 c 的文件操作一个是库函数的调用,linux 中系统调用文件操是底层的文件调用,其运行效率略有差距,同时参数也不同,返回的数据类型也不同。步骤 4:按照说明重新修改程序 3-2,并使用 time 命令察看程序执行的时间效率上有何区别。步骤 5:输入、编译并运行程序 3-3 和 3-4,写出执行结果,并比较他们 fseek 和 lseek 在使用方法上的异同 两者都是对文件的读写指针进行设置但两者的返回类型不同,fseek 返回的是 int 型 lseek返回的是 off_t 型 步骤 6:学习并分别使用标准 C 的文件操作函数和 Linux 的系统调用创建一个对学生基本信息进行操作(插入、修改和删除)的 C 程序,学生基本信息以结构体的形式存储在文件中,struct stu_info 的定义如下:struct stu_info char stu_num12;char name10;short int sex;/*0 为女生,1 为男生*/char mobile_phone12;3、实验结论 通过对文件操作的编程,让我掌握了文件的创建,打开,读写,以及特定位置的读写关闭等操作。并且从系统底层调用和标准 c 函数库两个角度对文件的操作比较中,认识到两者的异同。实验四 Linux 下进程操作与进程间通信 1、实验目的 (1)学习和掌握 fork 等系统调用的基本使用方法。(2)利用 Linux 中的管道实现父子进程间的同步。2、实验内容与步骤 步骤 1:使用 Vi 将程序清单 4-1 的程序输入、编译并运行,学习和掌握 fork 的基本调用方法。步骤 2:使用 Vi 将程序清单 4-2、4-3 和 4-4 的程序输入、利用 gcc 分别编译这三个程序,写出编译命令和编译结果,如果不成功,尝试利用 gdb 调试。gcc-o list4_2 gcc-o father gcc-o child 步骤 3:写出编译这三个程序的 makefile,然后利用 make 进行编译,谈谈这么做的好处。可以节省劳动时间,让三个程序同时编译,简化了操作。步骤 4:运行这三个程序,写出运行结果。步骤 5:屏幕上显示出的执行结果是哪一个进程执行的结果 father 和 child 步骤 6:父进程中的 printf 有向屏幕输出吗为什么 没有,因为父进程的标准输出已经被重定向。步骤 7:利用父子进程间的管道通信方式,改写实验 3 步骤 6 要求的程序。3、实验结论 通过该节实验,我更进一步理解了 fock 函数 dup 函数 exercl 函数的工作原理,让我了解到了进程并发的概念。学习了如何创建子进程,进程映象替换,以及通过无名管道实现父子进程中的输入输出重定向 实验五 Linux 线程的使用 1、实验目的 学习和掌握 Linux 线程的创建以及同步方法。2、实验内容和步骤 步骤 1:输入程序 5-1,编译并运行写出执行结果。thread_function is was 10 Waiting for thread to finish.Thread joined,it returned Thank you for the CPU time share_int is now-10 步骤 2:仔细研读代码,描述pthread_create函数中各个参数的意义,并给出线程的入口函数的调用方法,描述两线程间参数传递的方式。该函数有四个参数,第一个参数为一个指向pthread_t类型数据的指针,第二个参数为创建线程的属性,一般用NULL表示用默认属性,第三个参数为指向要调用函数的函数指针,第四个参数是传给该函数的参数。参数传递方式:首先线程的函数要定义成void*(*start_routine)(void*)的形式,主线程创建子线程时可将要传给子线程的信息放在pthead_create函数的第四个参数上,子线程创建后就可以通过函数的参数直接获得(为一个void类型的指针)。步骤 3:打开注释掉的全局变量 aa 及操作 aa 的相关代码,回答这跟进程有什么不同。由于线程是共享进程内资源的,所以子线程如果改变了aa的值,主线程内aa的值也会发生改变,而如果是创建了一个子进程,若子进程改变了aa的值,主进程内aa的值是没有发生改变的。步骤 4:输入程序 5-2,编译并运行,写出运行结果。Input some text,Enter end to finish basjk You input 5 characters end Waiting for thread to finish.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要求的程序。要求启用两个线程,其中主线程接受用户对文件的操作命令然后发给子线程,子线程完成对文件的实际操作(注意线程间的同步)。3、实验结论 通过本节实验学习了如何创建线程,如何在线程之间传递参数已经共享数据,以及如何利用信号量同步线程。如何在线程之间传递参数已经共享数据,以及如何利用信号量同步线程。实验六 Linux 进程间的 IPC 1、实验目的 学习和掌握 Linux 进程间的 IPC 及同步方法。2、实验内容和步骤 步骤 1:输入程序 6-1,6-2 编译并运行写出执行结果。步骤 2:仔细研读代码,写出程序中实现 P、V 操作的相关函数和代码,描述程序的同步工作过程。上述代码实现多个进程读写临界区时,使用信号量进行同步的例子,读临界区时先 P 操作,出临界后 V 操作,上面结果中 O 与 X 的出现都是成队的。步骤 3:输入程序 6-3 和 6-4,编译执行并写出结果。步骤 4:程序 6-3 和 6-4 中哪段代码实现了共享,描述实现内存共享的主要函数的参数意义和这些函数的使用方法。int shmget(key_t key,size_t size,int shmflg);产者消费者:/semaphore&#include#include#include#include#include#include#include#define TEXT_SZ 2048 struct shared_use_st char some_textTEXT_SZ;union semun int val;struct semid_ds*buf;unsigned short int*array;struct seminfo*_buf;static int set_semvalue(int val,int th);static void del_semvalue(int th);static int semaphore_p(int th);static int semaphore_v(int th);static int sem_id;int main()int running=1;void*shared_memory=(void*)0;struct shared_use_st*shared_stuff;int shmid;sem_id=semget(key_t)1234,2,0666|IPC_CREAT);set_semvalue(1,0);set_semvalue(0,1);srand(unsigned int)getpid();shmid=shmget(key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);if(shmid=-1)fprintf(stderr,shmget failedn);exit(EXIT_FAILURE);shared_memory=shmat(shmid,(void*)0,0);if(shared_memory=(void*)-1)fprintf(stderr,shmat failedn);exit(EXIT_FAILURE);printf(Memory attached at%Xn,(int)shared_memory);shared_stuff=(struct shared_use_st*)shared_memory;while(running)semaphore_p(1);printf(You wrote:%s,shared_stuff-some_text);sleep(rand()%4);if(strncmp(shared_stuff-some_text,end,3)=0)running=0;semaphore_v(0);if(shmdt(shared_memory)=-1)fprintf(stderr,shmdt failedn);exit(EXIT_FAILURE);if(shmctl(shmid,IPC_RMID,0)=-1)fprintf(stderr,shmctl(IPC_RMID)failedn);exit(EXIT_FAILURE);exit(EXIT_SUCCESS);static int set_semvalue(int val,int th)union semun sem_union;=val;if(semctl(sem_id,th,SETVAL,sem_union)=-1)return(0);return(1);static void del_semvalue(int th)union semun sem_union;if(semctl(sem_id,th,IPC_RMID,sem_union)=-1)fprintf(stderr,Failed to delete semaphoren);static int semaphore_p(int th)struct sembuf sem_b;=th;=-1;=SEM_UNDO;if(semop(sem_id,&sem_b,1)=-1)fprintf(stderr,semaphore_p failedn);return(0);return(1);static int semaphore_v(int th)struct sembuf sem_b;=th;=1;=SEM_UNDO;if(semop(sem_id,&sem_b,1)=-1)fprintf(stderr,semaphore_v failedn);return(0);return(1);/semaphore&#include#include#include#include#include#include#include#define TEXT_SZ 2048 struct shared_use_st char some_textTEXT_SZ;union semun int val;struct semid_ds*buf;unsigned short int*array;struct seminfo*_buf;static int set_semvalue(int val,int th);static void del_semvalue(int th);static int semaphore_p(int th);static int semaphore_v(int th);static int sem_id;int main()int running=1;void*shared_memory=(void*)0;struct shared_use_st*shared_stuff;char bufferBUFSIZ;int shmid;sem_id=semget(key_t)1234,2,0666|IPC_CREAT);shmid=shmget(key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);if(shmid=-1)fprintf(stderr,shmget failedn);exit(EXIT_FAILURE);shared_memory=shmat(shmid,(void*)0,0);if(shared_memory=(void*)-1)fprintf(stderr,shmat failedn);exit(EXIT_FAILURE);printf(Memory attached at%Xn,(int)shared_memory);shared_stuff=(struct shared_use_st*)shared_memory;while(running)printf(Enter some text:);fgets(buffer,BUFSIZ,stdin);semaphore_p(0);strncpy(shared_stuff-some_text,buffer,TEXT_SZ);semaphore_v(1);if(strncmp(buffer,end,3)=0)running=0;if(shmdt(shared_memory)=-1)fprintf(stderr,shmdt failedn);exit(EXIT_FAILURE);exit(EXIT_SUCCESS);static int set_semvalue(int val,int th)union semun sem_union;=val;if(semctl(sem_id,th,SETVAL,sem_union)=-1)return(0);return(1);static void del_semvalue(int th)union semun sem_union;if(semctl(sem_id,th,IPC_RMID,sem_union)=-1)fprintf(stderr,Failed to delete semaphoren);static int semaphore_p(int th)struct sembuf sem_b;=th;=-1;=SEM_UNDO;if(semop(sem_id,&sem_b,1)=-1)fprintf(stderr,semaphore_p failedn);return(0);return(1);static int semaphore_v(int th)struct sembuf sem_b;=th;=1;=SEM_UNDO;if(semop(sem_id,&sem_b,1)=-1)fprintf(stderr,semaphore_v failedn);return(0);return(1);运行结果:

    注意事项

    本文(linux实验报告(2)30389.pdf)为本站会员(得**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开