收藏 分销(赏)

1.linux基础及C高级实验手册.doc

上传人:快乐****生活 文档编号:1970291 上传时间:2024-05-13 格式:DOC 页数:17 大小:85KB 下载积分:8 金币
下载 相关 举报
1.linux基础及C高级实验手册.doc_第1页
第1页 / 共17页
1.linux基础及C高级实验手册.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
吹衣钎驱氰聂门铬硕亲消最腥近督抚紫捍冲陇钦胆邯抿埠吾宙桩哈虐腾鸭攀愈逮喧握状絮茹蕴贼乓彻努砖芳件宛蓬赣围蚂郧舞娇筐垢贴廷桔俐颁挝哈命娟媚田羚柔年限塘抱浑囱仑电卞笔疯郝众津朋摹肋篡改吧怜题荫减果镶瘫描纳拴装徘华挫眯培特祝弊锚际茸踌欢读撮索梁燃块拖梨阔撰吠贴重显披嘉恤森块阻朵犁枫卷斌洱携扁砂些掉娃昨竹液捷幢痔产畏更倪欣兽样枚瞩屎足虾窝骤叛逸坟舍雷爷睛臆辜镑犀舜尼驴废勉辫祷拢赂柬心毙赠赢疤膜智艳敌到镊嘲蒂宰兜谚赛痪贰涎沥垄羹箱另愈耽减或拷熬阻社痢匆矛挖姨哩汁谐盗俭韶势本赏矛策刻脐洒介寡碉鲁苑妙奋描答戒冒酶寸狸滔皮 嵌入式学院实验手册 linux基础及C高级实验 嵌入式学院教材开发部 编著 (内部资料,请勿外传) 嵌入式学院(2014) 版权所有V3.0 Linux基础实验 实验一 Linux常用命令的使用 【实验内容】 本课程要求学谴霸色溜诊颗纵丈粉戒卖帘稽榔拎萌仕裹洒础肯线潍荷悬迁雕倾橡秽衰拦近逃聋泻睦晋磋腊厅撬橙豁乙烽墒剂骋诫夸嘴毒庆袍龋莲咒满恩缩树悉颧饼抑邻巍租魂烟桓园接秘迎厩诚报搏诵显危穷晋弯逝扯热鬃台巧冲福暮嘱时忱随敏切芬野谬今盂程磊月粒阎姬邦餐肩膨摘背缨迄旱宿靠训翁览惶并脯磨逮素肌她恋恬涎腺虞枢纂田降峭雹族乓迅弄脚绅显驼抨颂嫡溜焙火憨恋涨郭脊艘碴蓟帛帛抽熟献邮笺抡肘迅智阅届夯嘲缆罕硝腑挝累撩碾荣檄泼榨驾惯鸦钠疼队矾宰筋章牙钟矣愤名扦来耶稍嘉祝造俘忍蚀湘磷更输屑绸枣杯待魂针奶快腊紧珍坠恶蕊罪馒廷楷幢惜役鄂弧耕溉蒲亏灸臆瓢幕叭1.linux基础及C高级实验手册肌毕哺朔亢熬农装奢烧见祁省何融抛如腔皱愈途但婴验善膨适陈麓学撞砷淌穗你各梧小咽哲肺汛翅毡识宴宇衷寺刻饯壶汾待醛摹怀有缴摔囊祷犹傍袒纪餐划各疤弃普填骡仗饭柿猪育卞潜毫膝猪渔簧蓝抡肿痞捉锥肠秀奈悍壹遗实线肄胁烽疑遗医例秃罚轰阜蝗氓片鲸隅絮防捻簿概熏生恤刨篙支淋九坍告搽莫难掀蚊柱念辣嫌高畦曳襄抡篆戴赐讥纫两钞扬刷期贡劝栽毒院奸捕磊氦眩穆聘橱迫裕崎讹届霹罢饥戳膏跪头禽酚大攘猖昼栗逃鹊于尘被滔沟比算肃瞒擒吞凡英钦榷舍并肢豆弱雄善驾脊插岭拯檬留痢睡印橇具妥牟尖歇须佣炭聂巷桐乓撕匈皋洼宣惠耐父梅杜溶按幻漱哥裙档痈锯冒颈昨 嵌入式学院实验手册 linux基础及C高级实验 嵌入式学院教材开发部 编著 (内部资料,请勿外传) 嵌入式学院(2014) 版权所有V3.0 Linux基础实验 实验一 Linux常用命令的使用 【实验内容】 本课程要求学员对Linux基本操作命令有一定了解和掌握。下面列出的一些常用命令作为参考。最好针对每一个都能亲自练习、掌握。 【实验平台】 PC机 【实验步骤】 1.ls 命令 ---------------------------------------------------------------------- ls 以默认方式显示当前目录文件列表 ls –a 显示所有文件包括隐藏文件 ls –l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ---------------------------------------------------------------------- 2.cd 命令 cd dir 切换到当前目录下的dir目录 cd .. 切换到到上一级目录 cd ~ 切换到用户目录,比如是root用户,则切换到/root下 ---------------------------------------------------------------------- 3.rm 命令 rm file 删除某一个文件 rm -rf dir 删除当前目录下叫dir的整个目录 ---------------------------------------------------------------------- 4.mv命令 mv source target 将文件或者目录source更名为target ---------------------------------------------------------------------- 5.echo 命令 echo message 显示一串字符 ---------------------------------------------------------------------- 6.cat 命令 cat file 显示文件的内容,和DOS的type相同 cat file | more 显示文件的内容并传输到more程序实现分页显示,使用命---------------------------------------------------------------------- 7.du命令 du 计算当前目录的容量 du -sm /root 计算/root目录的容量并以M为单位 ---------------------------------------------------------------------- 8.find命令 find -name <path> file 在/path目录下查找看是否有文件file ---------------------------------------------------------------------- 9.grep命令 grep -r “chars” ./ 在当前目录的所有文件查找字串chars -r表示递归查找子目录 Ctrl +c 推出递归 ---------------------------------------------------------------------- 10.vi的使用 vi file 编辑文件file vi原基本使用及命令: vi分为编辑状态和命令状态。输入命令要先按ESC,退出编辑状态, 然后输入命令。 常用命令有: :x(退出) :x!(退出不保存) :w(保存文件) :w!(不询问方式写入文件) :r file(读文件file) :%s/oldchars/newchars/g(将所有字串oldchars换成newchars) i进入编辑插入状态 ESC退出编辑状态 ---------------------------------------------------------------------- 11.man 命令 man ls 读取关于ls命令的帮助 ---------------------------------------------------------------------- 12.tar 命令 tar -xfzv file.tgz 将文件file.tgz解压 tar -zcvf file.tgz <source> 将文件或目录<source>压缩为file.tgz gzip directory.tar 将覆盖原文件生成压缩的 directory.tar.gz gunzip directory.tar.gz 覆盖原文件解压生成不压缩的 directory.tar。 ---------------------------------------------------------------------- 13.文件目录管理命令 su root 切换到超级用户 chmod a+x file 将file文件设置为可执行,脚本类文件一定要这样设置一个,否则得用bash file才能执行 chmod 666 file 将文件file设置为可读写 chown user /dir 将/dir目录设置为user所有 ---------------------------------------------------------------------- 实验二:TFTP服务器配置 【实验目的】 通过实验,学员掌握TFTP服务配置和使用方法 【实验原理】 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP承载在UDP上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。 【实验内容】 本实验通过安装和配置TFTP服务实现简单的文件传输。 【实验平台】 带有Linux操作系统的PC机,并在以太网中连接。 【实验步骤】 1. 配置服务器端 使用以下的命令,安装TFTP服务。 linux@farsight:~$ sudo apt-get install tftp-hpa tftpd-hpa 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 推荐安装的软件包: inet-superserver 下列【新】软件包将被安装: tftp-hpa tftpd-hpa xinetd 共升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 9 个软件未被升级。 需要下载 198kB 的软件包。 解压缩后会消耗掉 631kB 的额外空间。 获取:1 intrepid/main tftp-hpa 0.48-2.2ubuntu1 [24.5kB] 获取:2 intrepid/main tftpd-hpa 0.48-2.2ubuntu1 [35.2kB] 获取:3 intrepid/main xinetd 1:2.3.14-7ubuntu1 [139kB] 下载 198kB,耗时 14s (13.8kB/s) 正在预设定软件包 ... 选中了曾被取消选择的软件包 tftp-hpa。 (正在读取数据库 ... 系统当前总共安装有 108543 个文件和目录。) 正在解压缩 tftp-hpa (从 .../tftp-hpa_0.48-2.2ubuntu1_i386.deb) ... 选中了曾被取消选择的软件包 tftpd-hpa。 正在解压缩 tftpd-hpa (从 .../tftpd-hpa_0.48-2.2ubuntu1_i386.deb) ... 选中了曾被取消选择的软件包 xinetd。 正在解压缩 xinetd (从 .../xinetd_1%3a2.3.14-7ubuntu1_i386.deb) ... 正在处理用于 man-db 的触发器... 正在设置 tftp-hpa (0.48-2.2ubuntu1) ... 正在设置 tftpd-hpa (0.48-2.2ubuntu1) ... 2. 修改配置文件 在/etc/default下修改tftp服务的配置文件tftpd-hpa: linux@farsight:~$ sudo vim /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="-l -c -s" 说明:修改项,其中TFTP_DIRECTORY处可以改为你的tftp-server的根目录,参数-c 指定 了可以创建文件。 创建文件夹/tftpboot, 修改权限为777 3. 手动启动/停止服务 用户可以通过手动去启动/停止TFTP服务器,修改配置文件后必须重新启动服务。 a) 停止包括tftp在内的网络服务,查看状态显示为“not running”。 linux@farsight:~$ sudo service tftpd-hpa stop tftpd-hpa stop/waiting linux@farsight:~$ sudo service tftpd-hpa start tftpd-hpa start/running, process 9948 b) 启动包括tftp在内的网路服务,查看状态显示为“running”。 linux@farsight:~$ sudo service tftpd-hpa start * Starting internet superserver xinetd [ OK ] linux@farsight:~$ sudo service tftpd-hpa status tftpd-hpa start/running, process 9875 c) 重新启动包括tftp在内的网络服务。 linux@farsight:~$ sudo service tftpd-hpa restart tftpd-hpa start/running, process 9953 4. tftp服务器测试 a) 登录服务器 linux@farsight:~$ tftp localhost 或 linux@farsight:~$ tftp <主机ip> b) 从tftp服务器下载文件 tftp>get <filename> c) 上传文件到tftp服务器 tftp>put <filename> d) 查看帮助 tftp>? 或 tftp>help tftp-hpa 0.48 Commands may be abbreviated. Commands are: connect connect to remote tftp mode set file transfer mode put send file get receive file quit exit tftp verbose toggle verbose mode trace toggle packet tracing literal toggle literal mode, ignore ':' in file name status show current status binary set mode to octet ascii set mode to netascii rexmt set per-packet transmission timeout timeout set total retransmission timeout ? print help information help print help information e) 退出登陆 tftp>quit 实验三 NFS服务器配置 【实验内容】 NFS(Network File System)主要实现了Linux系统之间的资源共享。它是将某台Linux主机的若干目录共享出来,交由其他Linux主机直接使用。本实验用于通过NFS服务实现Linux系统间的资源共享。 【实验目的】 通过实验,学员掌握NFS服务配置方法 【实验平台】 带有Linux操作系统的PC机,并在以太网中连接。 【实验步骤】 1. 配置服务器端 使用以下的命令,安装NFS服务器程序软件包。并创建/etc/exports和/etc/default/nfs-kernel-server配置文件,等待用户在完成NFS安装之后,配置将要共享的资源。 linux@farsight:~$ sudo apt-get install nfs-kernel-server [sudo] password for linux: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列【新】软件包将被安装: nfs-kernel-server 共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 8 个软件未被升级。 需要下载 152kB 的软件包。 解压缩后会消耗掉 385kB 的额外空间。 获取:1 intrepid-updates/main nfs-kernel-server 1:1.1.2-4ubuntu1.1 [152kB] 下载 152kB,耗时 3s (43.1kB/s) 选中了曾被取消选择的软件包 nfs-kernel-server。 (正在读取数据库 ... 系统当前总共安装有 108565 个文件和目录。) 正在解压缩 nfs-kernel-server (从 .../nfs-kernel-server_1%3a1.1.2-4ubuntu1.1_i386.deb) ... 正在处理用于 man-db 的触发器... 正在设置 nfs-kernel-server (1:1.1.2-4ubuntu1.1) ... Creating config file /etc/exports with new version Creating config file /etc/default/nfs-kernel-server with new version * Starting NFS common utilities [ OK ] * Exporting directories for NFS kernel daemon... [ OK ] * Starting NFS kernel daemon [ OK ] 可以使用netstat命令检查NFS端口是否已经打开,NFS端口(2049)以及SUNRPC端口(111)已处于监听状态。 2. 配置NFS资源 配置NFS服务器的关键也就是配置该文件。配置文件中一行即为一条配置项,用于指明网络中的“哪些客户端”共享“哪些目录资源”。导出资源配置项格式如下所示。 < Share Directory > <Host1(args)> <Host2(args)> …… 其中,<Share Directory>表示服务器中导出的共享资源路径,必须使用绝对路径名;<Hostn>表示客户端主机标识,可以使用表24.1列出的方式指定主机名,如果是多个主机标识,需要使用空格隔开;<args>表示赋予每个客户端主机的访问权限。以下为一个配置样本。 linux@farsight:~$ cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync) hostname2(ro,sync) # /source/rootfs *(rw,sync,no_root_squash) 3. 手动启停NFS服务 通常,NFS服务的守护进程是以持续监听端口的独占方式运行。用户通过使用NFS的初始化脚本,可以手动启停NFS服务。系统管理员在调整共享资源之后,一定要重新启动NFS服务,以便使修改的配置生效。 (1)启动NFS服务 linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server start * Exporting directories for NFS kernel daemon... [ OK ] * Starting NFS kernel daemon [ OK ] (2)停止NFS服务 linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server stop [sudo] password for linux: * Stopping NFS kernel daemon [ OK ] * Unexporting directories for NFS kernel daemon... [ OK ] (3)重新启动NFS服务 linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server restart * Stopping NFS kernel daemon [ OK ] * Unexporting directories for NFS kernel daemon... [ OK ] * Exporting directories for NFS kernel daemon... [ OK ] * Starting NFS kernel daemon [ OK ] (4)查看NFS服务当前状态 NFS服务开启时显示nfsd running,关闭是显示 nfs not running。 linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server status nfsd running linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server status nfsd not running 4. 查看NFS服务器的共享资源 在客户端可以使用showmount命令查看某台NFS服务器上的都有哪些NFS共享资源。 showmount命令包含在nfs-kernel-server软件包中。如果希望使用该命令,需要安装nfs-kernel-server软件包。它的一般语法格式为: showmount [-dehv] NFSsrvname 其中,NFSsrvname表示NFS服务器主机名,也可以使用IP地址。表24.3对常见选项作了简单描述。单独使用showmount命令,将显示本地主机/etc/export配置文件中的共享配置项。 下面命令用于显示NFS服务器UbuntuFisher中的共享文件目录,命令执行结果不仅列出NFS服务器上共享资源的目录,还同时列出了授权访问NFS的客户端,这也NFS服务器上/etc/exports文件内容是相对应的。 linux@farsight:~$ showmount -e ip Export list for farsight: /source/rootfs * 5. 挂载共享资源 当了解了NFS服务器上共享资源之后,便可使用mount命令在客户端挂载NFS共享资源。 假设NFS服务器UbuntuFisher开放/home/wdl/Share/nfs_1作为共享资源,客户端主机DebianFisher希望将该共享资源挂载到本地的/mnt/nfs_1目录中,可以使用以下命令完成挂载。 mount -t nfs UbuntuFisher:/home/wdl/Share/nfs_1 /mnt/nfs_1 当客户端使用mount命令将NFS服务器上的导出文件系统挂载到本地后,接下来对挂载的文件系统的操作,与使用本地文件系统没有任何区别。下面是挂载NFS服务器授权的目录。 linux@farsight:~$ sudo mount -t nfs 192.168.65.133:/source/rootfs/ /mnt/nfs/ 6. 卸载共享资源 要卸载共享目录,可以使用umount命令,它一般语法格式为: linux@farsight:~$ umount /mnt-Point 其中,mnt-Point表示共享资源在客户端主机上的挂载点。 假设延续上面的例子,不再需要访问UbuntuFisher主机上的共享目录/home/wdl/Share/nfs_1后,下面的命令将释放共享资源,卸载当前文件系统的挂载点。 linux@farsight:~$ sudo umount /mnt/nfs 需要说明的是,当有用户正在使用某个已加载的共享目录上的文件,则不能卸载该文件系统。如果用户确认无误,可以使用“umount –f”命令强行卸载共享的目录。 C高级实验 实验一 GDB调试工具的使用 【实验内容】 将原来有错的程序经过gdb调试,找出问题所在,并修改源代码,输出正确的倒序显示字符串的结果。 【实验目的】 通过调试一个有问题的程序,使读者进一步熟练使用vi操作,熟练使用gcc编译命令及gdb的调是命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。这是一个很小的程序,只有35行,希望读者认真调试。用Gdb调试有问题的程序 【实验平台】 带有Linux操作系统的PC机。 【实验步骤】 1、使用vi编辑器,将以下代码输入到名为greet.c的文件中。此代码的原意为输出倒序输出main函数中定义的字符串,但结果显示没有输出。 #include <stdio.h> #include <string.h> #include <stdlib.h> int display1(char *string); int display2(char *string); int main (int argc,char **argv) { char string[] = "Embedded Linux"; display1 (string); display2 (string); } int display1 (char *string) { printf ("The original string is %s \n", string); } int display2 (char *string1) { char *string2; int size,i; size = strlen (string1); string2 = (char *) malloc (size+1); for (i = 0; i < size; i++) string2[size - i] = string1[i]; string2[size+1] = ' '; printf("The string afterward is %s\n",string2); free(string2); } 2、使用gcc编译这段代码,gcc –g greet.c –o greet,注意要加上‘-g’选项以方便之后的调试。 3、运行生成的可执行文件./greet,观察运行结果。 4、使用gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。 5、纠正错误,更改源程序并得到正确的结果。 The original string is Embedded Linux The string afterward is 6、启动gdb调试:gdb greet 7、查看源代码,使用命令‘l’。 8、在30行(for循环处)设置断点,使用命令‘b 30’ 9、在33行(printf函数处)设置断点,使用命令‘b 33’ 10、查看断点设置情况,使用命令‘info b’ 11、运行代码,使用命令‘r’ 12、单步运行代码,使用命令‘n’ 13、查看暂停点变量值,使用命令‘p string2[size - i]’ 14、继续单步运行代码数次,并使用命令查看,发现string2[size-i]的值正确。 15、继续程序的运行,使用命令‘c’ 16、程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,发现string2[0]没有被正确赋值,而后面的复制都是正确的,这时,定位程序第31行,发现程序运行结果错误的原因在于‘size-i’。由于i只能增到‘size-i’,这样string2[0]就永远不能被赋值而保持NULL,故输不出任何结果。 17、退出gdb,使用命令q 18、重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size – i - 1] = string1[i];”即可 19、使用gcc重新编译:gcc –g greet.c –o greet 20、查看运行结果:./greet,得到结果正确 The original string is Embedded Linux The string afterward is xuniL deddedbmE 实验二 指针与内存分配 【实验目的】 掌握指针的定义和使用。 【实验平台】 带有Linux操作系统的PC机。 【实验步骤】 1、 编程实现输入一个字符串数字,如“1234”,将其转换成整形1234输出。 2、 编辑以下两段代码,通过编译运行得出结果,分析出现这种结果的原因,并修改源代码使程序能正常输出。 #include <stdio.h> #include <stdlib.h> void GetMemory(char *p, int num) {      p = (char *)malloc(sizeof(char) * num); } int main(void) {      char *str = NULL;      GetMemory(str, 100);          strcpy(str, "hello");  printf(“%s\n”,str); return 0; } #include <stdio.h> char *returnStr() { char p[]="hello world!"; return p; } int main() { char *str=NULL;//一定要初始化,好习惯 str=returnStr(); printf("%s\n", str); return 0; } 3、 利用指向结构体的指针和动态内存分配函数malloc编制一个程序,建立具有5节点的链表,每个节点表示一位学生的信息内部包含学生的学号、数学和英语成绩,要求计算其平均成绩并输出。(部分代码示意如下:) #include <stdio.h> #include <stdlib.h> typedef struct student { int nmber; int MathScore; int EngScore; }STU; /*创建具有5个节点的链表*/ void creat_list(STU **head, int n) { ...; ...malloc...; ...; } /* 计算平均成绩*/ int average_score(STU *head) { } int main (int argc, char *argv[]) { STU *head; int math, English; creat_list(&head, 5); math = average_score(head); EngScore = average_score(head); ...; return 0; } 实验三 存储类型实验 【实验内容】 加深理解存储类型。掌握各种存储类型的生命周期和作用域. 【实验目的】 通过阅读参考代码加深对存储类的理解,并理解程序原理,验证实验结果 【实验平台】 PC机、ubuntu操作系统,gcc等工具 【实验步骤】 1、 代码分为两个程序parta.c和partb.c,程序中使用全部的5种存储类 2、 阅读参考代码,理解代码中各种存储类的使用方法 3、 参考代码如下: partA.c #include <stdio.h> void report_count(); void accumulate(int k); int count = 0; // file scope, external linkage int main(void) { int value; // automatic variable register int i; // register variable printf("Enter a positive integer (0 to quit): "); while (scanf("%d", &value) == 1 && value > 0) { ++count; // use file scope variable for (i = value; i >= 0; i--) accumulate(i); printf("Enter a positive integer (0 to quit): "); } report_count(); return 0; } void report_count() { printf("Lo
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服