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

    linux实验报告(2).pdf

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

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

    linux实验报告(2).pdf

    LinuxLinux 实验报告实验报告黄芳恺黄芳恺姓姓名名班班级级软件工程软件工程 114114学学号号8 8阮越阮越指导教师指导教师目录目录实验一实验一 Linux Linux 基本命令的使用基本命令的使用实验二实验二 简单简单 ShellShell 程序设计程序设计实验三实验三 Linux Linux 下简单下简单 C C 程序设计与文件操作程序设计与文件操作实验四实验四 Linux Linux 下进程操作与进程间通信下进程操作与进程间通信实验五实验五 Linux Linux 线程的使用线程的使用实验六实验六 Linux Linux 进程间的进程间的 IPCIPC实验七实验七 Linux Linux 下访问下访问 MysqlMysql 数据库数据库实验八实验八 Linux Linux 下网络编程下网络编程练习题:练习题:grepgrep、bashbash、生产者消费者、生产者消费者实验一实验一 Linux Linux 基本命令的使用基本命令的使用1 1、实验目的、实验目的学习和掌握 Linux 的基本命令。2 2、实验内容和步骤、实验内容和步骤步骤步骤 1 1:以 user_login 用户身份并使用 telnet 登录 Linux 服务器,按照提示创建自己的账户和口令。步骤步骤 2 2:使用新创建的用户账户和口令登录Linux 系统,察看登录后的界面。步骤步骤 3 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.-lFignore file步骤步骤 4 4:在当前目录下建立一个名为test 的新目录,然后将工作目录切换到test 下,尝试将/etc 目录下的文件 passwd 拷贝到该目录下(cp 源文件 目的目录)。察看当前目录下的passwd 文件的属主和文件权限。步骤步骤 5 5:尝试向当前目录下的passwd 文件和/etc/passwd 文件分别写入一些新内容(可使用echo“字符串”文件的命令),看看操作能否成功,如果不能成功,请说明原因。用cat命令浏览文件 password 的内容,用 more 命令进行浏览翻页操作,再用 less 命令浏览文件的内容。比较这几个命令的不同之处对当前目录中成功,因为该目录下的 passwd 文件对当前用户具有写的权限。对/etc/passwd文件的操作被拒绝因为对当前用户不具有写的权限cat 命令将文件的内容全部显示,more 命令将文件内容分屏显示,less 命令进行刷新的全部显示步骤步骤 6 6:用 ls 命令查看 test 下文件的权限,用 mv 命令更改文件 password 的文件名为,尝试用 chown 和 chgrp 更改文件的属主为 root、组为 root,看看能否成功,不成功,请说明原因。尝试用 chomd 将文件权限为“-rw-”。看看能否成功,不成功,请说明原因。用 chown 和 chgrp 更改文件的属主为 root、组为 root,不成功。因为 chown 和 chgrp 一般是 root 的权限步骤步骤 7 7:用 rm 命令删除 test 目录下的所有文件,再用rmdir 命令删除 test 目录。(想一想有没有一条命令将目录及目录下的所有文件删除,写出这条命令)rm-rf testrm-rf test步骤步骤 8 8:使用 ps 命令查看当前系统内的进程,并利用man 命令获取 ps 命令的参数,写出获取当前终端进程执行情况的ps 命令。步骤步骤 9 9:使用 df 命令查看当前系统已安装的文件系统的空间使用情况,记录结果。步骤步骤 1010:使用 du 命令查看用户的工作目录占用了多少空间,记录结果。步骤步骤 1111:使用 free 命令查看内存资源的使用情况,记录结果。步骤步骤 1212:使用 man 获取 tar 和 gzip 的帮助信息,尝试将 test 目录下的文件打包并压缩,然后到另外一目录 tmp 下解包,写出这几条命令。步骤步骤 1313:尝试执行“ls l tmp”,看看这条命令的执行会出现什么结果,解释一下这条命令。创建一个名为 tmp 的文件并将 ls-l 输出的内容写入 tmp 中步骤步骤 1414:尝试执行 find/usr/src-name*.c-print|xargs grep“#include”,看看这条命令的执行会出现什么结果,解释一下这条命令。匹配查找列表输出/usr/src 下以.c 结尾的文件中含有“#include”的内容步骤步骤 1515:执行 cal 和 date 命令,说说这两条指令的用途。步骤步骤 1616:执行命令 clear 和 logout,退出系统。(想一想有没有其他的方法,写出这种方法)Exit步骤步骤 1717:执行命令 shutdown,关闭系统。(想一想有没有更简单的命令,写出这条命令)Init 0Init 03 3、实验结论、实验结论通过对通过对 linuxlinux 的常用命令的学习,让我对的常用命令的学习,让我对 linuxlinux 的系统有了初步的认识的系统有了初步的认识-这是一个完全基这是一个完全基于命令操作的操作系统,这些命令组成了强大的命令系统,提供了完善的功能。这些命令于命令操作的操作系统,这些命令组成了强大的命令系统,提供了完善的功能。这些命令操作将为我以后的操作将为我以后的 linuxlinux 学习打下良好的基础。学习打下良好的基础。实验二实验二 简单简单 ShellShell 程序设计程序设计1 1、实验目的、实验目的(1)学习和掌握 vi 编辑器的基本使用方法。(2)学习和掌握编写简单的 shell 程序。2 2、实验内容和步骤、实验内容和步骤 vi vi 的使用的使用步骤步骤 1 1:以 root 用户身份登录进入 Linux系统。步骤步骤 2 2:启动 Vi,切换到输入模式,输入一段英文:Thisiaanexercise!WeuseVitoeditit.Left,down,up,right步骤步骤 3 3:尝试匹配其中的一串字符,写出这命令及执行结果。:/Left步骤步骤 4 4:尝试替换其中的一串字符,写出这命令及执行结果。:3s/Left/123/g步骤步骤 5 5:尝试复制/删除其中的一行或几行文本,写出命令及执行结果。命令模式下,光标移动到那一行按”nyy”(n为要复制的行数)再按p粘贴。命令模式下,光标移动到那一行按”ndd”(n为要删除的行数)删除一行或几行。步骤步骤 6 6:尝试复制/删除其中的一个单词或几个字符,写出命令及执行结果。命令模式下,光标移动到那一行按”nyw”(n为要复制的单词数)再按p粘贴。命令模式下,光标移动到那一行按”ndw”(n为要删除的单词数)删除一个或几个字符。步骤步骤 7 7:尝试使用鼠标复制文本,写出命令及执行结果。直接使用鼠标选中复制,将光标移动到要粘贴的地方用鼠标粘贴即可完成复制文本。步骤步骤 8 8:尝试存盘退出操作,写出命令。:wq简单的简单的 shellshell 程序程序步骤步骤 1 1:使用 Vi 将程序清单 2-1 的程序输入。步骤步骤 2 2:尝试运行该程序,如果不能运行,原因是什么,怎样修改。没有执行权限chmod+x test步骤步骤 3 3:执行程序,写出程序的执行结果。步骤步骤 4 4:阅读程序,掌握 shell 函数的编写方法,补全函数file_run。file_run()ls-l|awk/-(.x)+/print$9步骤步骤 5 5:修改程序中的函数 uers(),使得显示在线用户时不分行。(提示:可以使用循环,对每个在线用户分别处理。)uers()echo there are who|wc-l users onlineecho who arefor i in$(who|awk print$1);doprintf%s$idoneecho3 3、实验结论、实验结论LinuxLinux 系统系统 shellshell 编程其本质就是编程其本质就是 linuxlinux 命令的组合,命令的组合,通过许多简单命令的组合可以完成很通过许多简单命令的组合可以完成很多功能,可以开发一些小型程序。多功能,可以开发一些小型程序。实验三实验三 Linux Linux 下简单下简单 C C 程序设计与文件操作程序设计与文件操作1 1、实验目的、实验目的(3)学习和掌握 gcc 等 Linux 的开发调试环境。(4)学习并掌握 Linux 的文件操作。(5)编写并实现实验步骤 6 要求的程序。2 2、实验内容和步骤、实验内容和步骤步骤步骤 1 1:使用 Vi 将程序清单 3-1 和 3-2 的程序输入,并在当前目录下创建文件“”和文件“”,尽可能的使文件“”大一些。步骤步骤 2 2:利用 gcc 分别编译这两个程序,写出编译命令和执行结果,如果不成功,尝试利用gdb 调试。gcc o list3_1gcc o list3_2步骤步骤 3 3:仔细观察这两个程序,比较标准 C 的文件操作和 Linux 的系统调用 open、read、write等的使用区别。答:标准 c 的文件操作一个是库函数的调用,linux 中系统调用文件操是底层的文件调用,其运行效率略有差距,同时参数也不同,返回的数据类型也不同。步骤步骤 4 4:按照说明重新修改程序3-2,并使用 time 命令察看程序执行的时间效率上有何区别。步骤步骤 5 5:输入、编译并运行程序3-3 和 3-4,写出执行结果,并比较他们fseek 和 lseek 在使用方法上的异同两者都是对文件的读写指针进行设置但两者的返回类型不同,fseek 返回的是 int 型 lseek返回的是 off_t 型步骤步骤 6 6:学习并分别使用标准 C 的文件操作函数和 Linux 的系统调用创建一个对学生基本信息进行操作(插入、修改和删除)的C 程序,学生基本信息以结构体的形式存储在文件中,struct stu_info 的定义如下:struct stu_info char stu_num12;char name10;short int sex;/*0 为女生,1 为男生*/char mobile_phone12;3 3、实验结论、实验结论通过对文件操作的编程,让我掌握了文件的创建,打开,读写,以及特定位置的读写关闭通过对文件操作的编程,让我掌握了文件的创建,打开,读写,以及特定位置的读写关闭等操作。并且从系统底层调用和标准等操作。并且从系统底层调用和标准 c c 函数库两个角度对文件的操作比较中,认识到两者函数库两个角度对文件的操作比较中,认识到两者的异同。的异同。实验四实验四 Linux Linux 下进程操作与进程间通信下进程操作与进程间通信1 1、实验目的、实验目的(1)学习和掌握 fork 等系统调用的基本使用方法。(2)利用 Linux 中的管道实现父子进程间的同步。2 2、实验内容与步骤、实验内容与步骤步骤步骤 1 1:使用 Vi 将程序清单 4-1 的程序输入、编译并运行,学习和掌握fork 的基本调用方法。步骤步骤 2 2:使用 Vi 将程序清单 4-2、4-3 和 4-4 的程序输入、利用 gcc 分别编译这三个程序,写出编译命令和编译结果,如果不成功,尝试利用gdb 调试。gcc-o list4_2gcc-o fathergcc-o child步骤步骤 3 3:写出编译这三个程序的makefile,然后利用 make 进行编译,谈谈这么做的好处。可以节省劳动时间,让三个程序同时编译,简化了操作。步骤步骤 4 4:运行这三个程序,写出运行结果。步骤步骤 5 5:屏幕上显示出的执行结果是哪一个进程执行的结果father 和 child步骤步骤 6 6:父进程中的 printf 有向屏幕输出吗为什么没有,因为父进程的标准输出已经被重定向。步骤步骤 7 7:利用父子进程间的管道通信方式,改写实验3 步骤 6 要求的程序。3 3、实验结论、实验结论通过该节实验,我更进一步理解了通过该节实验,我更进一步理解了 fockfock 函数函数 dupdup 函数函数 exerclexercl 函数的工作原理,让我了解函数的工作原理,让我了解到了进程并发的概念。学习了如何创建子进程,进程映象替换,以及通过无名管道实现父到了进程并发的概念。学习了如何创建子进程,进程映象替换,以及通过无名管道实现父子进程中的输入输出重定向子进程中的输入输出重定向实验五实验五 Linux Linux 线程的使用线程的使用1 1、实验目的、实验目的学习和掌握 Linux 线程的创建以及同步方法。2 2、实验内容和步骤、实验内容和步骤步骤步骤 1 1:输入程序 5-1,编译并运行写出执行结果。thread_function is was 10Waiting for thread to finish.Thread joined,it returned Thank you for the CPU timeshare_int is now-10步骤步骤 2 2:仔细研读代码,描述pthread_create函数中各个参数的意义,并给出线程的入口函数的调用方法,描述两线程间参数传递的方式。该函数有四个参数,第一个参数为一个指向pthread_t类型数据的指针,第二个参数为创建线程的属性,一般用NULL表示用默认属性,第三个参数为指向要调用函数的函数指针,第四个参数是传给该函数的参数。参数传递方式:首先线程的函数要定义成void*(*start_routine)(void*)的形式,主线程创建子线程时可将要传给子线程的信息放在pthead_create函数的第四个参数上,子线程创建后就可以通过函数的参数直接获得(为一个void类型的指针)。步骤步骤 3 3:打开注释掉的全局变量aa 及操作 aa 的相关代码,回答这跟进程有什么不同。由于线程是共享进程内资源的,所以子线程如果改变了aa的值,主线程内aa的值也会发生改变,而如果是创建了一个子进程,若子进程改变了aa的值,主进程内aa的值是没有发生改变的。步骤步骤 4 4:输入程序 5-2,编译并运行,写出运行结果。Input some text,Enter end to finishbasjkYou input 5 charactersendWaiting for thread to finish.Thread joined步骤步骤 5 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 aprocess.If pshared is nonzero,then the semaphore is shared between processes.步骤步骤6 6:学习并使用线程间的同步方法,重新改写实验3步骤6要求的程序。要求启用两个线程,其中主线程接受用户对文件的操作命令然后发给子线程,子线程完成对文件的实际操作(注意线程间的同步)。3 3、实验结论、实验结论通过本节实验学习了如何创建线程,如何在线程之间传递参数已经共享数据,以及如何利通过本节实验学习了如何创建线程,如何在线程之间传递参数已经共享数据,以及如何利用信号量同步线程。如何在线程之间传递参数已经共享数据,以及如何利用信号量同步线用信号量同步线程。如何在线程之间传递参数已经共享数据,以及如何利用信号量同步线程。程。实验六实验六 Linux Linux 进程间的进程间的 IPCIPC1 1、实验目的、实验目的学习和掌握 Linux 进程间的 IPC 及同步方法。2 2、实验内容和步骤、实验内容和步骤步骤步骤 1 1:输入程序 6-1,6-2 编译并运行写出执行结果。步骤步骤 2 2:仔细研读代码,写出程序中实现P、V 操作的相关函数和代码,描述程序的同步工作过程。上述代码实现多个进程读写临界区时,使用信号量进行同步的例子,读临界区时先P 操作,出临界后 V 操作,上面结果中 O 与 X 的出现都是成队的。步骤步骤 3 3:输入程序 6-3 和 6-4,编译执行并写出结果。步骤步骤 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 2048struct 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;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;semaphore_v(0);=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 2048struct 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).pdf)为本站会员(ylj18****70940)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




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

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

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

    收起
    展开