ImageVerifierCode 换一换
格式:DOC , 页数:19 ,大小:429.08KB ,
资源ID:12024606      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/12024606.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(linux基础实验报告含代码.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

linux基础实验报告含代码.doc

1、 Linux基础实验 目录 实验一 3 实验二 4 实验三 6 实验四 9 实验五 11 实验六 14 实验七 16 实验一 螺旋矩阵 一、 实验目的 1. 熟悉linux下c程序编写。 2. 掌握Makefile编写方法。 二、 实验环境和工具 Red Hat Linux 三、 实验流程 1. 编写螺旋矩阵程序 2. 编写Makefile文件 四、 实验结果 五、 实验心得 通过这次实验,我熟悉了li

2、nux下c语言程序的编写,掌握了vi的一些常用操作,学会了使用gcc命令和makefile文件两种方法编译程序。同时也使我熟悉了linux里常用命令的使用,还有,学会了挂载U盘的方法,可以很方便的往linux里传送文件。 六、 关键代码 Makefile 文件 CC=gcc EXEC=juzhen OBJS=juzhen.o all:$(EXEC) $(EXEC):$(OBJS) $(CC) -o $@ $(OBJS) clean: -rm -f $(EXEC) $(OBJS) 实验二 添加、删除用户 一、 实验目的 1. 设计一个shell程序,分

3、组批量添加用户。 2. 再设计一个批量删除用户的shell程序。 二、 实验环境和工具 Red Hat Linux 三、 实验流程 1. 编写shell程序 2. 修改文件权限 chmod +x addusers 3. 运行脚本 四、 实验结果 添加用户: 删除用户: 五、 实验心得 通过本次实验,我了解了shell脚本编程的方法和其语法规则。掌握了使用shell脚本程序添加、删除用户的方法。需要注意的是:shell脚本直接用vi编写,要特别注意空格。 六、 关键代码 添加用户: 删除用户: 实验三 驱动螺旋

4、矩阵 一、 实验目的 1. 掌握驱动模块的建立、插入和删除。 2. 利用驱动模块实现测试程序输入矩阵的行和列,驱动程序生成相应的字母螺旋矩阵。 二、 实验环境和工具 Red Hat Linux 三、 实验流程 1. 编写驱动程序。 2. 编写测试程序。 3. 编写Makefile文件。 4. 编译程序,插入驱动模块,运行驱动程序,观察运行结果,删除驱动模块,再次运行测试程序,观察运行结果。 四、 实验结果 1.插入驱动模块后测试程序运行结果: 2.删除驱动模块后测试程序运行结果: 五、 实验心得 通过这次实验,我对linux下驱动程序的工作原理有了一定的了

5、解,认识了内核态和用户态的区别。Linux以文件的形式定义系统的驱动程序,驱动程序不仅仅是内核的一部分,也是连接用户态和内核态之间的桥梁。我学会了简单的驱动程序的开发和测试方法。本次实验我遇到的难点有以下几点: 1. 实验要求输出一个字母螺旋矩阵,测试程序应当定义一位数组还是二维数组。 解决方法:使用一维数组,编程简单,在输出是将一维数组以二维形式输出即可。 2. 驱动程序中如何实现螺旋矩阵。 解决方法:在驱动程序中另写一个螺旋矩阵函数,在ssize_t_evan_write函数里调用。 六、 关键代码 1.驱动程序: static char drv_buf[1024]; s

6、tatic ssize_t evan_write(struct file *filp, char *buffer, size_t count) { int row; int col; copy_from_user(drv_buf,buffer,count); row=(int)(drv_buf[0]); col=(int)(drv_buf[1]); printk("user write data to drivers!\n"); solve(row,col); } 3.测试程序: int main(){ …… printf("please input two inte

7、ger:\n"); scanf("%d%d",&row,&col); buf[0]=(char)(row); buf[1]=(char)(col); write(fd,buf,2); printf("Read %d bytes data from /dev/evan \n",row*col); read(fd,buf,row*col); showbuf(buf,row,col); ioctl(fd,1,NULL); close(fd); return 0; } void showbuf(char * buf,int row,int col) { int i;

8、for(i=0;i

9、 实验心得 通过本次实验,我了解了Linux下多线程机制,线程是系统能够独立调度和分配的最基本单位,可以理解为是进程基础上的进一步细化。一个程序中同时运行多个线程来完成不同的任务,称之为多线程。哲学家进餐问题是经典的同步问题,我先是去网上查找相关资料,找到了程序源码,一开始编译不通过,报告“段错误”,是因为代码中有些字符不规范,修改后编译通过。经运行测试,程序中缺少延时机制,无法得出程序运行结果,我在程序里加了sleep语句后程序结果可读性大大改善。从这个实验我也认识到培养在网上检索资料的能力的重要性。 六、 关键代码 注:加粗部分为修改部分 sem_t chopsticks[PEO

10、PLE_NUM]; pthread_mutex_t mutex; void *philosopher(void *arg){ int state = THINKING; int right = (id + 1) % PEOPLE_NUM; int left = (id + PEOPLE_NUM - 1) % PEOPLE_NUM; while(1){ switch(state){ case THINKING: sleep(1);

11、 …… break; case HUNGRY: sleep(2); strcpy(ptrState,"Hungry"); pthread_mutex_lock(&mutex); if(sem_wait(&chopsticks[left]) == 0){//非阻塞状态 if(sem_wait(&chopsticks[right]) == 0){//非阻塞 pthread_mutex_unl

12、ock(&mutex); state = EATING; }else{ state = THINKING; sem_post(&chopsticks[left]);//释放请求的得到的left筷子 } } break; case EATING:

13、 sleep(3); sem_post(&chopsticks[left]); sem_post(&chopsticks[right]); …… break; } } pthread_exit((void*)0); } int main(){ pthread_t tid[PEOPLE_NUM]; pthread_mutex_init(&mutex,NULL); for(i

14、 0 ; i < PEOPLE_NUM ; i ++){ sem_init(&chopsticks[i],0,1); } for(i = 0 ; i < PEOPLE_NUM ; i ++){ pthread_create(&tid[i],NULL,philosopher,(void*)i); ;创建五个哲学家线程 } for(i = 0 ; i < PEOPLE_NUM ; i ++){ pthread_join(tid[i],NULL); ;等待线程执行结束

15、 } return 0; } 实验五 shell模拟程序的设计与实现 一、 实验目的 1. 理解shell的概念及其执行过程。 2. 实现一个交互式shell,具备的功能至少有:打印提示符,获取用户输入指令;解析指令;寻找命令文件,执行指令。 二、 实验环境和工具 Red Hat Linux 三、 实验流程 1. 明确程序的功能要求。 2. 逐步实现程序功能:打印提示符、获取用户输入命令、解析命令、寻找命令文件、执行命令。 代码见关键代码部分。 四、 实验结果 五、 实验心得 本次实验,让我学会了简单的shell模拟器的编

16、程实现,理解了shell模拟器的工作原理和工作过程。Shell是操作系统的用户界面,提供了用户与内核进行交互操作的接口,负责接收用户命令并把其送入内核去执行。通过shell,用户可以方便的管理计算机资源。Shell模拟器不断的接收用户指令并解析执行,直到用户关闭它,所以程序中要有一个while(1)循环。实验中我只实现了对几个常用指令的解释执行,基本模拟了shell的实现。我感觉本次试验的难点是:如何将用户输入的指令与系统中的指令正确对应;字符串操作不熟悉,一些函数不知道。C语言提供了strncasecmp函数进行字符串比对,然后根据返回值进行相应的指令处理即可。 六、 关键代码 whil

17、e(1) { path=get_current_dir_name(); memset(cmd, 0, 1024); printf("@zhangyu %s>$ ",path); fgets(cmd, 1000, stdin);/*接受用户输入,命令最长1000个字符*/ cmd[strlen(cmd) - 1] = 0;/*去掉输入的回车符*/ b = transcmd(cmd);/*分析取得用户命令字*/ switch(b){ case 9:/*如果是Bye*/ printf("Se

18、e you later!\n"); break; case 1:/*切换工作目录*/ if(chdir(cmd + 3) != 0) { printf("chdir(%s) error!%s\n", cmd + 3, strerror(errno)); } break; case 2:/*ls命令*/ case 7:/*cp命令*/ case 8:/*pwd命令*/ system(cmd); break; case 3:/*pid命令*/

19、 printf("%d\n", getpid()); break; case 4:/*rm命令*/ remove(cmd + 3); break; case 5:/*mkdir命令*/ mkdir(cmd + 6, 0755); break; case 6:/*mv命令*/ p = strchr(cmd + 3, ' '); *p = 0; rename(cmd + 3, p + 1); break; case 0:/*不能

20、识别的命令*/ printf("Bad command, try again! All aviable commands are:\nlogout cd ls pwd pid rm mkdir mv cp\n", getpid()); break; } } } char transcmd(char * s) { if(!strncasecmp(s, "cd", 2)) return 1; else if(!strncasecmp(s, "ls", 2)) return 2; else if(!strncasecmp(s, "p

21、id", 3)) return 3; else if(!strncasecmp(s, "rm", 2)) return 4; else if(!strncasecmp(s, "mkdir", 5)) return 5; else if(!strncasecmp(s, "mv", 2)) return 6; else if(!strncasecmp(s, "cp", 2)) return 7; else if(!strncasecmp(s, "pwd", 3)) return 8; else if(!strncasecmp(s, "bye",3)) retur

22、n 9; else return 0; } 实验六 系统调用 一、 实验目的 1. 理解系统调用过程 2. 学会自己添加系统调用 二、 实验环境和工具 Red Hat Linux 三、 实验流程 1. 决定系统调用名字,本实验中叫__NR_print_info,内核中系统调用实现程序的名字:sys_print_info。之后在头文件unistd.h添加系统调用号,该文件所在目录是/usr/include/asm/unistd.h,如下: 2. 在系统调用表中添加相应表项,系统调用表所在目录:/usr/src/linux-2.4/arch/i3

23、86/kernel/entry.S 3. 添加实现程序,目录:/usr/src/linux2.4/kernel/sys.c 4. 修改Makefile文件,将版本号改为-17(用来区别之前的系统)。 5. 编译内核:进入内核所在目录,依次输入如下命令: make mrproper; make clean; make menuconfig; make dep; make bzImage; make modules; make modules_install 6. 将生成的新内核移动到boot下并改名,操作如下: cp /usr/src/linux-2.4/arch/i386/boot/b

24、zImage /boot/vmlinuz-2.4.20-17 ; cp /usr/src/linux-2.4/System.map /boot/System.map-2.4.20-17 ;cd /boot ; mkinitrd initrd-2.4.20-17.img 2.4.20-17 7. 修改grup文件,添加新启动项 8. 重启系统,进入新内核,编写测试程序,运行调试。 四、 实验结果 五、 实验心得 系统调用是内核提供的、功能十分强大的一系列函数,是用户程序与内核交互的一个接口。通过本次实验,我理解了系统调用的实现过程,应用程序执行系统调用后,从用户

25、态切换到内核态,之后在内核空间调用内核函数,执行完毕后从内核态切换回用户态。实验中不好理解的一点是如何根据系统调用号259在系统调用表中找到相应表项。系统调用表中有一句代码:.rept NR_syscalls-(.-sys_call_table)/4. 开始的“.”代表当前地址,sys_call_table代表数组首地址,所以两个变量相减,得到差值表示这个系统调用表的大小(字节数),之后再除以4(每个系统调用占四个字节),得到系统调用个数。一开始我总是做不成功,是因为在添加系统调用号的时候添错了地方,我加在了/usr/src/linux-2.4/include/asm-i386/unistd.

26、h,改正后便实现了。 六、 关键代码 实验七 FloppyLinux的实现 一、 实验目的 1. 了解linux的引导过程。 2. 实现一款FloppyLinux。 二、 实验环境和工具 Red Hat Linux 工具:busybox 三、 实验流程 1. 软盘安装引导器 a. 对软盘建立ex2文件系统 #mke2fs /dev/fd0 b. 将系统中grub目录下的引导文件stage1,stage2复制到软盘中 c. 配置grub信息 2. 配置busybox相关选项 Make menuconfig 前三个选项中只选择第一项,其他默认。

27、 3. 编译并安装busybox 4. 建立临时目录,该目录为软盘的文件系统 5. 建立设备列表 6. 建立启动配置文件(重点步骤) 7. 制作镜像文件 initrd.img 8. 检查,用loop设备把镜像文件重新挂装到文件系统里,之后压缩镜像文件。 9. 编译linux内核 注意make menuconfig步骤,按照书上的要求来,最后我编译的内核大小为810k。 10. 整合启动盘 11. 测试 四、 实验结果 五、 实验心得 通过本次实验,我了解了linux系统的启动过程,进一步熟悉了linux内核编译过程。学会了floppylinux的制作方法,

28、做成之后非常有成就感。我认为本实验并不难,考验的是细心。实验步骤很多,每个步骤出现错误,都有可能导致实验失败。所以要力求每个步骤准确无误,特别是建立启动配置文件的时候,要仔细核对每一个单词,特别注意空格。第一遍没有成功,原因就出在这里。总之,面对一个步骤复杂的事情,要细心。 六、 关键代码 Inittab: ::sysinit:/etc/init.d/rcS ::askfirst:/bin/sh rcS: #!/bin/sh mount –a # chmod 755 rc.sysinit fstab: proc /proc proc defaults 0 0 grub.conf timeout 0 default 10 title FloppyLinux root (fd0) kernel /boot/bzImage initrd /initrd.img.gz

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服