版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文件系统 ls 实现与内核编码一 . 设计目的操作系统是控制和管理计算机硬件和软件资源的虚拟机, 其中的文件系统是对软件和设备进行管理的系统, 文件系统是操作系统中非常重要的一个模块, 它的实现占用了操作系统源码的最大编码量, 其好坏也直接影响着用户对操作系统的感受程度。 通过对操作系统课程设计的实践, 进一步加深对文件系统的认识和理解, 并在此基础上培养学生的工程应用能力。实验分别从用户态和内核态两个层实践文件系统的部分功能。二 . 设计内容1 .使用Linux 编程实现用户态下带参数的ls 命令功能ls 命令支持以下功能:支持-l 参数;输出结果按字典排序;列出“ . ”文件,支持 -a
2、参数,在没有-a 时候不显示隐藏文件;显示记录总数;支持对给定的目录进行操作,如 ls /tmp ;正确显示文件特殊属性suid 、 sgid 和 stick y;支持 -u 参数,它会显示出文件的最后访问时间;当关掉一个文件的读权限, 就不能打开这个文件来读。 如果从一个终端登录, 打开一个文件, 保持文件的打开状态, 然后从另外的终端登录, 去掉文件的读权限, 看会出现什么情况。编写一个程序,先用 open() 打开一个文件,用 read() 读一些内容,调用 sleep() 等待 20s以后, 再读一些内容,从另外的终端,再等待的 20s 内去掉文件的读权限, 这样会有什么结果?2 .
3、编写内核模块显示目录或文件的信息。调试Linux操作系统原理与应用第 8章文件系统P215的例子给内核模块传入参数path ,其中 path 为绝对路径当 path 为目录时,显示目录对应的 dentrey 结构中的相关信息(可打印的信息) ;当 path 为文件时,显示文件对应的 indoe 结构中的相关信息(可打印的信息) ;当路径错误时,有错误提示信息。.概要设计1.功能模块图;实现ls命令功能文 件 名 按 字 典 排 序在一终端运行1.c ,读出文件 中的内容,在另 一终端修改文 件权限,再显示 结果,然后在修 改文件权限,再 显不'结果OLs -laLs -luLs -ua
4、Ls -luaLs指定文件/指定目录-lLs指定文件/指定目录-uLs 指定文件/指定目录 -aLs指定文件/指定目录-laLs指定文件/指定目录-luLs 指定文件/指定目录 -uaLs指定文件/指定目录 Tua编写内核模块编写内核模块,打印super_block结构中一些域的值。(课本上白例子)给内核模块传入参数path ,其中path为绝对路径显示目录信息显示文件信息显示错误信息2各个模块详细的功能描述。实现 ls 命令功能Is -l:每个文件单独占一行,显示文件的详细属性信息 ls -a :显示包括隐藏文件在内的所有文件ls -u:显示出文件的最后访问时间ls:显示的文件名按字典顺序排
5、序 ls / 指定目录:显示当前目录下的内容 ls -lu : 每个文件单独占一行, 显示文件的详细属性信息, 并且显示出文件的最后访问时间ls -la :显示包括隐藏文件在内的所有文件的详细属性信息ls -lua:显示包括隐藏文件在内的所有文件的详细属性信息,并且显示出文件的最后访问时间 chmod 权限 文件名:修改文件的权限,并且显示出此文件是否受suid , sgid 和 sticky 的控制 chmod 权限 (3 位) 在一终端运行程序,读取文件信息,在另一终端修改文件权限,看结果。编写内核模块编写内核模块,打印 super_block结构中一些域的值。(课本上白例子)遍历系统中的
6、超级块: list_head 结构类型的字段名称为 s_list 。 list_entry 宏通过指向 list_head节点的地址来得到外部超级块的首地址。 获取系统中个超级块的地址, 获得某个子进程的地址, 打印文件系统所在的主设备号和次设备号和文件系统名。 遍历打印每个超级块中的所有索引节点号,打印索引结点。给内核模块传入参数path ,其中 path 为绝对路径path= 路径时,显示如下信息 :目录项标志哈希表短目录名目录项长度目录项名目录项计数器的引用path= 文件时,显示如下信息:文件索引节点的数量文件类型和权限用户 ID用户组 ID指定文件系统的读写访问标志文件大小索引节点的
7、状态硬链接数引用记数文件的块数版本号以位为单位的块大小错误信息显示: Open file failed四.详细设计1 .功能函数的调用关系图ls命令i昔误处理函数,打印出错误所在行的行数和错误信息void my_error(constchar *error_string, int line);获取文件属性void show_file_attribute(struct stat buf,char *file_name,int flag_u)输出文件的文件名,若命令中没有-1选项,则输出文件时要保证h下对齐void show_fi1e_co1umns(cha*fi1e_name)四艮据命令行参数(
8、存放在flag中)和完整路径名(存放在pathname)显示目标文件void show_fi1e(int f1ag,char *pathname)为显示某个目录下的文件做准备,path:要显示的目录void show_file_dir(int flag_param,char*path)编写内核模块编写内核模块,打印 super_block结构中一些域的值。(课本上白例子)给内核模块传入参数path ,其中path为绝对路径2 .各功能函数的数据流程图ls命令获取文件属性void show_file_attribute(struct stat buf,char *file_name,int fl
9、ag_u)输出文件的文件名,若命令中没有-1选项,则输出文件时要保证h下对齐void show_fi1e_co1umns(charfi1e_name)四艮据命令行参数(存放在flag中)和完整路径名(存放在pathname)显示目标文件void show_fi1e(int f1ag,char *pathname)从路径中解析出文件名为显示某个目录下的文件做准备,path:要显示的目录void show_file_dir(int flag_param,char*path)编写内核模块(课本上白例子)编写内核模块,打印 super_block结构中一些域的值。遍历打印每个超级块中的所有索引节点号索
10、引节点数量打印索引结点锁 解给内核模块传入参数path ,其中path为绝对路径文件信息目录信息输出目录项信息±目录项标志哈希表短目录名目录项长度目录项名目录项计数器的引用3 .重点设计及编码ls命令重点设计:为显示某个目录下的文件做准备,path:要显示的目录编码:void show_file_dir(int flag_param,char *path)DIR *dir;对目录进行操作struct dirent *ptr;/对目录的数据项进行操作int count=0;char filenames256PATH_MAX+1,tempPA TH_MAX+1;char tempfile
11、PATH_MAX+1;struct stat buf;int atimePATH_MAX+1,temp1;/获取该目录下文件总数和最长的文件名dir=opendir(path);if(dir=NULL)my_error("opendir",_LINE_);while(ptr=readdir(dir)!=NULL)对整个目录进行遍历if(filename_maxlen<strlen(ptr->d_name) filename_maxlen=strlen(ptr->d_name);count+;closedir(dir);if(count>256)my_
12、error("这个目录下的文件太多了",_LINE_);int i,j,length=strlen(path);/获取该目录下所有的文件名dir=opendir(path);for(i=0;i<count;i+)ptr=readdir(dir);if(ptr=NULL)my_error("readdir",_LINE_);/_LINE_:预编译器内置宏,表示行数strcpy(tempfile,path);strcat(tempfile,ptr->d_name);if(lstat(tempfile,&buf) = -1) my_erro
13、r("lstat", _LINE_);atimei = buf.st_atime;strncpy(filenamesi,path,length);/ 保存文件路径filenamesilength='0'strcat(filenamesi,ptr->d_name);/d_name: 当前目录下所有文件/子目录filenamesilength+strlen(ptr->d_name)='0'/文件名按最后访问时间进行排序if(flag_param = PARAM_U|(flag_param = PARAM_U+PARAM_A)for(i
14、 = 0;i < count-1;i+)for(j = i+1;j < count;j+)if(atimei < atimej)temp1 = atimei;atimei = atimej;atimej = temp1;strcpy(tempfile,filenamesi); strcpy(filenamesi,filenamesj); strcpy(filenamesj,tempfile);else/文件名按字母顺序存储于filenamesfor(i = 0; i < count-1; i+)for(j = 0; j < count-1-i; j+) if( s
15、trcmp(filenamesj,filenamesj+1) > 0 ) strcpy(temp,filenamesj+1);tempstrlen(filenamesj+1) = '0'strcpy(filenamesj+1,filenamesj);filenamesj+1strlen(filenamesj) = '0' strcpy(filenamesj, temp);filenamesjstrlen(temp) = '0'for(i = 0; i < count; i+)show_file(flag_param, filename
16、si);closedir(dir);/如果命令中没有-l 选项 ,打印一个换行符if(flag_param & PARAM_L)=0) printf("n");else printf(" 总记录数是: %dn",(int)sum/2);编写内核模块编写内核模块,打印 super_block结构中一些域的值。(课本上白例子) 重点设计:遍历系统中的超级块编码:list_for_each(pos,(struct list_head *)SUPER_BLOCKS_ADDRESS)/list_entry 宏通过指向 list_head 节点的地址来得到外
17、部超级块的首地址/list_head 结构类型的字段名称为 s_list/ 获取系统中个超级块的地址sb=list_entry(pos,struct super_block,s_list);/某个子进程的地址/ 打印文件系统所在的主设备号和次设备号printk("ndev_t:%d:%dn",MAJOR(sb->s_dev),MINOR(sb->s_dev);/ 打印文件系统名printk("file_type name:%s",sb->s_type->name);/ 遍历打印每个超级块中的所有索引节点号list_for_each
18、(linode,&sb->s_inodes)pinode=list_entry(linode,struct inode,i_sb_list);count+;printk("%lut",pinode->i_ino);/打印索引结点给内核模块传入参数path ,其中 path 为绝对路径重点设计:打开文件编码:static int kernel_file_open(char *path)/O_DIRECTORY 如参数所指的文件并非为一目录,则打开文件失败/ 以目录的形式打开file=filp_open(path,O_DIRECTORY,0);if(IS_E
19、RR(file)file=filp_open(path,O_RDWR|O_CREAT,0777); if(IS_ERR(file)printk("Open file %s failed.n",path);/路径错误return 0;/文件printk("open file success!n");printk("Path of file: %s",path);kernel_file_info();printk("ending!n");filp_close(file,NULL);return 1;else/目录pri
20、ntk("nThis is a diretory!n");printk("Path of directory: %s",path);kernel_dir_info();printk("ending!n");filp_close(file,NULL);return 0;五 测试数据及运行结1正常测试数据和运行结 ls 命令Iskulxi4QHlnfubuntu:'/xtaontnS ./nyts l.£1 *c*2.c31 txt5"i*E»y ,c-nylsnyls4c nyls*c- Ryls4
21、<c-Is -l并显示总记录数vlxiwvtnubuntii. /nyls -1rwxrwxr'x1huixtdoni.fihut xtaoritn8975ThyHay292614irw'rw-r-hutxtdonlnbutKtaanlnS71ThuHay2969:19:432614i.crw* rw*r-1hiiixidoninhulxidonin892ThuKay2909:17:5526141 * dxsrxS-xt1hutxtiantnhutxiicmtnieThuHay2998:16:152ftl42.crwxrwxrwxXhulxt4QPitflhutxtQfi
22、tn4&ThuHay29眄18 3Z9143.txt-wsrwS'wtthutxtAOHtnhvtxtofltn24ThyHay2908:51:272614S,crwxrwxrwx1hutxiaonicihuixiomtn5WedHay2822:41:2226146.cX +,”1hutxtaontnhuiKiomtn9S34WedHay2816:19:142614ny*c-rwxrwxr-x1hgxtaonlnhutxtaofitn18127ThuHay2912:23:192014nylsrw-rw-r-1hutxtdOHtnhutxldcntn16160ThuHay2912
23、:23:10zei4myls icrw-rw r-1hutxiaortinhutxionln16161ThuHay29ie:31:442614tiyls .c-1hutxtiontnhuixticntn9171TutHay2709:13140zei4”1见Jrwxrwxr-xzhutxticfttfthulxtaontn4098wedHay2911:59;39zei4xti0记录数是t 198 Is -autxtaontnutuntu:-* *£tXyls ,c-/xtaoFith$ ./nyls a.nylf.c.swp 11.£ ny.c*】.Ry I
24、sS.uFiyls4 ,c-6,c xtdOtuixtaonlnubuntu:-/xiaontnS i /Jiyls'Uylsnyls,c3.txt1nyls.c-5.C*cU2.C6.CxlaoHyiyl54.一 Is -uluixiaoninubuntu:-/wiaoninS ./nyls -urwxrwxr-xihutxiaoni.nhuixtaonin857SThuMay29ll;4S;40 Z0141rw-rw-r*-1hulMtaontnhuixtaoninB71ThuMay2969:30:31 2«14£,crw-rw-r-1huixiaontnhut
25、wiaonin892ThuHay2909:18:05 70141、wsrwStwthUamlnhutMtaominieThuH”29«8:16:15 26142.crwxrwxrwx1huixiaontnhuixiaonin4BThuMay2911:46 26143. txt-wsrwSwt1hutMiaomtnhutMiaonin24ThuMay2909:30;3Z Z614S.crwxrwxrwx1huixiaoninhuixtaomtn5N«d2B22:43:21 26146.Crw -rw-r-1huixiaomtnhuiMiaonin9334WedMay2816:
26、26:21 2014my ,c-rwxrwxr-x1hulxlamtnhutxtaonin18127ThuMay2912:23:2S 214piylsrw-rw-r-1huixiaoninhuixiaonin16160ThuMay2912:23:19 2614myls.crw-rw-r'-1huixiaopivnhuixtaonin16161ThuMay2910:31:4S ze14nyls *c-rw-rw-r* *1hutxtflOHiBhuixtaonin9t71TueH”2769:14:08 214何Vls4+弋一rwxrwxr-x2huixid口ntnhuixiaonin40
27、96H噌dMay2811:59:4T £014xiao2记录数是二10B Is -uaiuixiaoninubuntu :"/xiaomiinS . /nylLx -uaIiyls.myls.c >3. txt1lyls »c-S .c1 .yLs.c.swp xtaomy c-Fiyls4. c? Is -lautxtaoinubuntu:/xtacntn$ */nyls -la一Irwxrwxr-x3huixtaoriLnhutxiaontn4096ThuMay2912:23:192614Irwxr-mf-x19hutxtaontnhu
28、ixtaontn4090Thunay2912:23:102014 »r w » r - - r -1huixtaontnhutxtaonln16384NedMay2611:53:S32614,nyts,c.rwxrwxr-x1hutxtaontnhutxtaontn8975ThuMay2911:45:11Z014rw - rw r -1huixtaontnhuixiaortinB71ThuMay29©9:19:4320141. crw» rw- r-1hutxlaontnhulxtaomtnB92Thuftay2909:17:S926141-wsrwS-
29、wt1huixLaontnhutxtaontn10Thu298:16:1520142 .Crwxrwxrwx1huixtaontnhutMiaomlLni48ThuMay23SB:18:eS20143 . txt-wsrwS-wt1hutxtaontnhutxtaoritn24ThuMay29©8:51:2720145rwxrwMrwx1huixtaorainhuixtaomini5wedrtay22:41:222614后二cnt-rw*r-*1hutxtaorilnhutxtaontn9834HedMayze10:19:142014rwxrwxr -x1huixtaontnhutK
30、laoriln18127ThuMay2912:23:192614my Isrw-rw*r*-1hutxtaorwtnhutxtaontn10160ThuMay2912:23tie2014pyl s, crw - rw- r- ,1huixtaoritnhutxlaomtn18161Thuhay2916:31:442614myls.一rw-rw'r-1hutxlaonlnhotxtaontn9171rueMay27©9:2014p»yls4 -Irwxrwxr -x2hutxtaomtnhulxlaontn4096MedMay2611:59:302614xlao出记录
31、数里;132 Is -lauhuixtaoninubuntu:-/Kiaonin5 ./myls -lau3hulxlomtnhuixiaOHin4&96ThuHay2912:23:252614Irwxrxr-x19huixi3ontnhuixxaonin4096ThuMay2912:15:322614 rw ,1huixiaoninhuixtaonin16384WedMayZ822:38:102614 MVlU5rwxrwxr-x1hvixiaaninhuixiaontn8975ThuMey29il:4S:4fl2G141rw * rwr,1hulxiofflinhuiKtaonin
32、&71ThuM3y2969:10:312614l.crw-rw* ir* *1hulxiaoninhuixidominB92ThuMay29B9:18:052614l.c-wsrwS-iNit1huixiontnhuixtaonin19ThuMay29es:i6:is26142.crwxrwxrwx1huixiaoninhuiKiaonin40ThuMay1911:46:3g£6143.txt-wsrwS-wt1hulxiaomtnhuixtaoHin24ThuMay2969:30:322C14s.crwxrwxrwx1huixiaomtnhuixiaonin5MedMay2
33、B22:43:2126146.crw - rw - r - -1huixiaoninhuixtaonin9934WedMayZBie;ze;2i2614Ey + Grwxrwxr ' xthuixiaominhuixtaonin15127ThuMay2912:23;252614mylsrw-rw-r-1hulxiaontnhuixtaoninleieeThuMay2912:21:192014eyls.urw-rw- r* *1hutxiaoninhuixiaonin16161ThuMay2916:31:432614nyls»c-rw - rw - r E *1huixiaon
34、tnhutxiaonin9171TueMay2769:14:002614EVlS.JIrwxrwxr - x2huixiaoninhuiKtaonin4096HedMaySB11:59:472614xtao2记录数是:132 Is /tmpuixtaQtnubuntui-/xtaonin$ t/nyls /tnpiSL_PIPE_ie60_StngleOfftceIPC_a6a772bcdB2424ceaaS16ea635Sf64c urbnu38.tmp(j Ise - PKdhtXMmr 13n shla9AtJJ2hPW5 npbniCbCntty_suppQrt_test *6ls -
35、l文件名.c修改文件的属性并看suid, sgid, sticky是否起作用了。uixtacFitnubuntuz/xtaomtnS ./nyls -1 2_1-Crw - r - * 1 hutxtontn huixtaontn 28 Thu May 29 12:25:50 2014 2_i.cutxiaominubuntu:-/xiaonin$ chnod 7363 2_1.culxiaomtnubuntu:-/xtaoDtn5 */nyls -1 2_l*c-wsrwS WT 1 huixiaontn huixtaontn 2B Thu May 29 12:25:58 2014 2_l*
36、c?修改文件权限 读取3.txt中的内容*utxtaoninubuntu;*/xtaoni,n$ »/1 3,txt人3.txt中谡取的1。个字节是:fsghdjklofi善改文件权限木眠2。秒木弼2。秒后号次从3. txt中读取的18个字节屋:njhgfdtrc悯修改3.txt的权限utxtaoniniibuntu:-/xtaontnS chnod CBS 3.txt再读取3.txtmixiaoRintubuntu:-/xiaontn5 */1 3,txt 9有权限!修改3.txt权限utxtdQElnflubtjntu:r/xta0Mlcheod 777 3.txt再读取3.tx
37、ttuixi.aontnubuntu;*/xtaonin$ »/l 3,txt人mt中读取的1。个字节是:fsghdjklofi董改文件权限木眠2。秒木弼2。秒后号次从3. txt中读取的18个字节是:njhgfdtrcw编写内核模块 编写内核模块,打印 super_block结构中一些域的值。(课本上白例子)插入:insmod卸载:rmmod显示:dmesghutxtaontnubuntu:-$ sudo su5udo password for tiuixtmoMln:rootubuntu:/home/hutxtontna cd *.rootubuntu;/hone# cd /ho
38、ne/xtaorootubuntu:/hone/xtao* vim e_l.crootubuntu:/hone/xtao# vIe Hakeftlerootubuntu:/hcne/xiao# makemake -C /usr/src/llnux'hedders-3.8.0-19-generic tt=/home/xiao modulesndkel:正在进入目录 ' / usr/src/linux-headers-3.8.0-19-generic,CC M /horie/xtao/fl_l »oButiding nodules, stage 2.MODPOST 1 n
39、odulesLD M /hofne/xtO/8_l ,konakel:正在离并目录 ' /usr /src/llnux-headers-3.B.B-I9*genertc,rootubuntu:/hone/xiao# tnsnod 811korootubuntu:/hone/xlao# rrnod 81 rootubuntu:/hcme/xiao# dmesg.运行结果:显示主设备号,次设备号,文件类型名和索引节点数量。i5W5$#Wlij fll&_type nwne 二 t”fsJ豹2iSMS.ttnn dwj如"口 5奥5e7翔j fiu.typfl P5W: f
40、usee C122118,需17ZZB1A2281522814197B1157»1977g1977819m14747H74614M511744J474)97497459744974397421159ai5.tia47M fl”_type 旧醍;mpf乳口品15Hfli5utiM754) dtevj;配德L1M5T如jj 的后九百曲抬gj file.type nzne 二 t”f4|相& 15955 rfiW75-9 fe*JSfl:Z024l?415U1tie»伽”11575USII班T5555rW7Hn:(R|>fs52C4&544M5M 55州】制
41、册5g19757M1I7J55牌15湖12 W旧5H1375214SB) H64S DM3 116411 苏孤 131451171314719147MMA5d1+6M11M.511644734159&5,W7M d线:机 21fllt_type nine : fuiSwl也朔从辅丁蚯j d»J:A:22jl火氏陋潮j fll&type njne:fusel打595的脚”6 dewj:8:6l胃3 M丽丽 flU.tjip# MK;filSfiblkl65i52IW311417MT?11553115X1155】1M73WU1647111BU11B141111311559
42、115翘 115.56118481184711B4S11&4511B4431943IM11S41116451旧9】1目招11BF1 1啊11B35HAM1is) lien imi itsse lie 醇 hbzb11B2111B1Bnsn11B1S1191511112115541155电115491M65HM511B6A1fiSSl M55fi 16M91&54B16M71654fi34132571747Mb6S451S4乳g549雪白4MH朝2M1S7SB1577915115”3 11375n 居2321HIS2BSSmi12A4刈42M7卸购zm加9麓图11A5451拈把1
43、 祁拈11蚪0 llSSS 1154B11547113“1154114572S勃的1462145S4738iim34743B?SZ9依2474M51 斶M"l IM IB5Z51凋44遇47#需M如。11MB丽23Z2743404931券3515920 IMS11-4M1H的11你JZB1叉眈打,53121孑119那77泌可砰招酬Z322刘靖 触 5&S7AM雨MB647皿87时.844925391。加12S7BZ12S132fi M5+197$1M1&B2仃 7m时3727515M5«M9 The nunber of Lnm*露茹加亨224 159Hu56
44、325) untudlng.给内核模块传入参数path ,其中path为绝对路径调试ootubuntui/hone/xiaoRin#! vtn S_2.eoot0ubuntu:/home/xtaonin# naketake -C /usr/src/linux-headers-J +8+ 0-19-genertc H-/hone/xiaonin nodules iakel :正在进入目录1 /usr/arc/Linux - headers - 3,8.0-19 generic'CC m.Building modules, stage 2.MODPOST 1 nodulesLD M /ho
45、ne/xiaonin/B_2.ko旧kel J:正在离井目录,/usr/src/Wnux-headers-3.® fe-19-genertc' oot0ubuntu:/hone/xtaontn# tnsmod 82.ko ppchar'/hone/xtaonin/i" ooTubuRtu: /horte/xiaoninff Mod 8_2oot$ubuntu:/hone/xtaontnw dnesglpa path=文件15131*774242.15231477425915231.774262;152314774262;15231.774262:15231.
46、774267;1S231.7742711S231.774Z7315231.774276)15231,774279)15231,774281: 15231477423415231.77428715231.774269;15231.774292;15231.77429515231.774297'15231.774399:15238.177011* op«n file success!Path of file: /hone/xiaonin/1 This is a fileDisplay output information of file tnode 1 + nunber of f
47、ile inode:396399 2 + type and node of fi.l.e:l&e644 3.uid : fl 4Md : 6 5,(iQunt fljg;白 6,Slit of file:46 Testate tnode:0 8,hard link:1 9.use count:1 10.block nunber:S ll.V£510n:l 12.block size:12 ending! 青曾才杳1+ * * * * * *+-爸 立 path=目录15109,05075615169.059754:1510».«50754:15109405
48、0757;15109,050759This is a dtretorylPath of directory: /home/xiaonin/xiaoninninDisplay output infornation of dentry:1 .dentry flag:1282 .hash nuRbcr1327572434515109,050761 3,short name:xiaontnmin15109.050762:151J9 + 6Se764;15199.6567664.length of dentry:ie 5*nane of dentry:xicninntn 6*dentry count:115109.050767 enduig!当目录中没有文件时,会自动创建指定文件14317,161536: 11317,16153614317.161S3A; 14317.16154114317.161543: 14317*161545 14317.16154714317.161540 14317.161550 14317.161552 143174161553 14317.16155514317,161557 14317*161558: 14317.16156瓦 14al7.161562Path of ftle: /home/xtaoFiin/9Thi5 is a fileD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度电商渠道加盟协议书3篇
- 二零二四年度商业租赁合同的标的与属性分析
- 二零二四年度办公室地板采购合同
- 二零二四年度版权许可使用合同(音乐作品)
- 二零二四年度涉外税收优惠政策合同
- 二零二四年度铝合金模板企业员工培训合同
- 二零二四年度影视制作合同的服务条款
- 滨涯幼儿园2024年度学生健康体检合同
- 二零二四年度技术开发合同之技术成果共享与保密
- 二零二四年度煤矿通风系统改善工程承包合同
- 模拟商务谈判案例
- 短视频买卖协议书模板
- 《肾病综合征的护理》
- 《MBTI职业性格测试93题》
- 互联网导论智慧树知到答案章节测试2023年上海第二工业大学
- 防火门和防火卷帘的构造及安装标准
- 玩转PPT-多媒体课件制作实战智慧树知到答案章节测试2023年
- 蹲踞式起跑 优质课比赛一等奖
- 表单+药品管理检查记录表
- GB/T 15242.3-2021液压缸活塞和活塞杆动密封装置尺寸系列第3部分:同轴密封件沟槽尺寸系列和公差
- 大学生积极心理健康教育理论与实践课件积极体验
评论
0/150
提交评论