




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 Linux 下进程的创建一、实验目的1.了解进程的含义和系统调用fork()的原理2.掌握父子进程的创建的过程二、实验内容学习父子进程创建的原理,利用系统调用fork创建父子进程。三、预备知识1.有 C 语言基础2.掌握在 Linux 下常用编辑器的使用四、实验设备及工具硬件:UP-NETARM2410-S嵌入式实验仪、JTAG仿真器、PC机Pentumn500以上, 硬盘10G以上。软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境五实验步骤及程序1、启动虚拟机;2、在根目录下新建一个文件夹yms3、新建终端-输入:#cd #mkdir yms #cd /yms #vi test1.c4、进入vi编辑器,键入i进入编辑模式,输写程序:#include#includeMain( )int val;printf(“PID before fork():%dn”,(int)getpid();if(val=fork()printf(“parent process PID:%dn”,(int)getpid();elseprint(“child process PID:%dn”,(int)getpid();5、按Esc退出编辑模式,键入:进入末行模式后输wq保存退出;六、实验运行及结果# gcc o test1 test1.c# ./test1PID before fork():2254Child process PID:2255Parent process PID:2254实验二 Linux 下进程的通信一、实验目的掌握Linux下管道通信的原理二、实验内容编写程序,创建一个进程,通过管道实现父子进程之间的通信。三、预备知识1.有 C 语言基础2.掌握在 Linux 下常用编辑器的使用3.掌握父子进程间通信的知识四、实验设备及工具硬件:UP-NETARM2410-S嵌入式实验仪、JTAG仿真器、PC机Pentumn500以上, 硬盘10G以上。软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境.五实验步骤及程序1、启动虚拟机;2、新建终端-输入:#Cd /yms #vi test2.c3、进入vi编辑器,键入i进入编辑模式,输写程序:#includeMain()Int pid;Int fds2;Char buf150,buf250;Pipe(fds);If(pid=fork()0) Printf (“fork() Errorn”);Exit(1);Else if(pid=0) Close(fds0);Sprintf(buf1,”these are transmitted datan”); Write(fds1,buf1,50); Exit(1);Else Close(fds1);Wait(0);Read(fds0,buf2,50);Printf(“%sn”,buf2);4、按Esc退出编辑模式,键入:进入末行模式后输wq保存退出;六、实验运行及结果# gcc o test2 test2.c# ./test2These are transmitted data实验三Linux内核的裁剪一、 实验目的1.了解Linux内核的基本知识2.学习Linux内核裁剪的方法二、 实验内容对Linux内核进行裁剪三、 实验设备及工具硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境.四、 实验步骤Linux 内核的裁剪与编译看上去是个挺简单的过程。只是对配置菜单的简单选择。但是内核配置菜单本身结构庞大,内容复杂。具体如何选择却难住了不少人。因此熟悉与了解该菜单的各项具体含义就显得比较重要。我们现在就对其作一些必要介绍: Linux 内核的编译菜单有好几个版本,运行:1)make config:进入命令行,可以一行一行的配置,这不好使用所以我们不具体介绍。2)make menuconfig:进入我们熟悉的menuconfig 菜单,相信很多人对此都不陌生。3)make xconfig:在2.4.X 以及以前版本中xconfig 菜单是基于TCL/TK 的图形库的。所有内核配置菜单都是通过Config.in 经由不同脚本解释器产生.config。而目前刚刚推出的2.6.X 内核用QT 图形库。由KConfig 经由脚本解释器产生。这两版本差别还挺大。2.6.X 的xconfig 菜单结构清晰,使用也更方便。但基于目前2.4.X 版本比较成熟,稳定,用的最多。所以这里我还是以2.4.X 版本为基础介绍相关裁剪内容。同时因为xconfig 界面比较友好,大家容易掌握。但它却没有menuconfig 菜单稳定。有些人机器跑不起来。所以考虑最大众化角度,我们以较稳定,且不够友好的menuconfig为主进行介绍,它会用了,Xconfig 就没问题。 2.4.X 版本xconfig 配置菜单,2.4.X 版本menuconfig 配置菜单,2.6.X 版本 xconfig 配置菜单分别如图4.1.4,4.1.5,4.1.6 所示:在选择相应的配置时,有三种选择方式,它们分别代表的含义如下:Y-将该功能编译进内核N-不将该功能编译进内核M-将该功能编译成可以在需要时动态插入到内核中的模块如果你是使用的是make xconfig,那使用鼠标就可以选择对应的选项。这里使用的是make menuconfig,所以需要使用空格键进行选取。在每一个选项前都有一个括号, 有的是中括号有的是尖括号,还有圆括号。用空格键选择时可以发现,中括号里要么是空,要么是*,而尖括号里可以是空,*和M这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。具体配置菜单中有很多选项,你可以根据自己需要删选合适的部分。选择完之后就裁剪完成。实验四 Linux 下shell的程序设计一、实验目的1.掌握linux操作系统的安装。 2.熟练掌握linux下的常用字符命令。 3.掌握linux下网络配置和文件共享的方法。 4.熟悉vi编辑器的使用 5.掌握shell 编程二、实验内容Step11. 基本命令:cd,mkdir,rmdir,cp,mount,ls,pwd,ps等2.TAB 文件目录匹配搜索的使用3. ncftp 工具的使用4man编程时获取帮助5. 取消root密码6. 临时修改PC 机IP 地址7. 压缩/解压缩 Step2(一)vi编辑器使用: 1、 vi编辑器的模式 a.一般模式 b.编辑模式 c.命令模式 2、VIM的启动保存和退出 (二)Linux shell程序设计(shell 编程): 编辑?.sh文件,要求执行该文件能够完成以下功能: a. 创建/user1目录; b.将/arm2410s/exp/basic/的所有文件和目录拷贝到/user1目录下, c. 拷贝开始和结束时给出提示信息。 三、实验设备及工具硬件:UP-NETARM2410-S嵌入式实验仪、JTAG仿真器、PC机Pentumn500以上, 硬盘10G以上。软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境.四实验步骤及程序1、启动虚拟机;2、新建终端-输入: # Cd /yms #vi test5.sh3、进入vi编辑器,键入i进入编辑模式,输写程序:#! /bin/bashbackup_dir=/arm2410s/exp/basic/ back_log=/yms/user1function write_log()err_msg= ERROR in backup file/directory(/yms/user1)suc_msg= SUCCESS in backup file/dirctory(/yms/user1)if $backup_log -eq 0 ;then echo $err_msgelseecho $suc_msgfifunction backup_file( ) cp -fra /arm2410s/exp/basic/ /yms/user1 /-fra连同创建时间等信息照原样递归地复制到新目录write_log $backup_log function creat_log_file() if -e $backup_log;thenrm -f $backup_logfimkdir p /yms/user1 /-p强制新建目录文件clearecho backup process beginscreat_log_filebackup_file echo backup process ends4、按Esc退出编辑模式,键入:进入末行模式后输wq保存退出;五、实验运行及结果# chmod +x test5.sh /设置可执行权限# ./test5.sh /.sh文件不用编译直接运行结果: Backup process begins./test5.sh: line 10:missing Success in backup file /directory (/yms/user1)Backup process ends实验五 Linux 下程序库的使用一、实验目的1.了解Linux下函数库的基本知识2.掌握静态库和动态库的使用二、实验内容静态函数库:是一个普通的目标文件的集合,一般用“.a”作为文件的后缀。静态函数库和共享函数库相比有很多的缺点,占用内存空间多。但使用ELF格式的静态库函数生成的代码可以比使用共享函数库的程序运行速度上快一些。可以用ar这个程序来创建一个静态函数库文件,或者往一个已经存在地静态函数库文件添加新的目标代码。例如把file1.o和file2.o加入到my_library.a这个函数库文件: ar rcs my_library.a file1.o file2.o 然后运行 ranlib,以给库加入一些索引信息动态库(static lib)也可一也可以成为共享库(shared lib),一般的后缀名是.so。动态库与静态库有点类似,他们都是一系列的object文件的集合,只是他们的组织方式不同。同样他们的链接方式也是不同的,动态库只在执行是链接使用,并不把相应的部分编译入程序中,在使用是一个库可以被多个程序使用故可称为共享库,而静态库将会整合到程序中,链接时各程序使用自己的库。下面我们来介绍如何创建动态库,还是之前的三个文件,同样的布局,进入lib目录gcc -c -fPIC test1.cgcc -c -fPIC test2.c-fPIC告诉gcc将源代码编译成共享的object文件,PIC(Position-Independent Code)非位置依赖性代码。gcc -shared -fPIC -o libtest.so test1.o test2.o将两个文件整合为共享库libtest.so退出lib目录,进入上一层目录gcc -o app app.c -Llib -ltest ./app./app: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory在这里遇到一个error没找到libtest.so,说明我们的编译成功了,libtest.so成为了一个shared libary。程序之所以不能运行是因为libtest.so不在默认的搜索路径上解决方法1: LD_LIBRARY_PATH=$PWD/lib ./app解决方法2: 在/etc/ld.so.conf下面加一行/home/fred/test/lib, 保存过后ldconfig一下,新的library才能运行 三、实验设备及工具硬件:UP-NETARM2410-S嵌入式实验仪、JTAG仿真器、PC机Pentumn500以上, 硬盘10G以上。软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境.四实验步骤及程序1、启动虚拟机;2、新建终端-输入: # Cd /ymsapp.clibtest1.ctest2.clibtest.a当前工作目录 # mkdir lib # Cd ./lib # Vi test1.c 输写程序 ,保存退出 # Vi test2.c 输写程序 ,保存退出 # Cd /yms # Vi app.c 输写程序 ,保存退出3、进入vi编辑器,键入i进入编辑模式,输写程序:(test1)的程序:#include stdio.hint hello_world1() printf(hello world1n); return 1;(test2)程序: #include stdio.hvoid hello_world2() printf( hello world2n);App.c的程序:#include stdio.hint main() hello_world1(); hello_world2();return 0;五、实验运行及结果1、静态#cd /yms/lib#gcc c test1.c#gcc -c test2.c#Ar cr libtest.a test1.o test2.o#cd /yms#gcc o app app.c -Llib -ltest# ./app结果hello world1hello world22、动态#cd /yms/lib#gcc -c -fPIC test1.c#gcc -c -fPIC test2.c /-fPIC 告诉 gcc把源代码编译成共享的object文件#gcc -shared -fPIC -o libtest.so test1.o test2.o /将两个文件整合为共享库libtest.so#cd /yms#gcc -o app app.c -Llib -ltest./app结果:报错./app: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory在终端输入ID_LIBRARY_PATH=$PWD/lib ./app成功显示结果hello world1hello world2实验六 Linux 下多线程设计一、实验目的1了解多线程程序设计的基本原理。2学习pthread库函数的使用。二、实验内容读懂 pthread.c 的源代码,熟悉几个重要的PTHREAD 库函数的使用。掌握共享锁和信号量的使用方法。进入/arm2410s/exp/basic/02_pthread 目录,运行make 产生pthread 程序,使用NFS 方式连接开发主机进行运行实验。三、实验原理1多线程程序的优缺点多线程程序作为一种多任务、并发的工作方式,有以下的优点:1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。2) 使多CPU 系统更加有效。操作系统会保证当线程数不大于CPU 数目时,不同的线程运行于不同的CPU 上。3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。LIBC 中的pthread 库提供了大量的API 函数,为用户编写应用程序提供支持。2实验源代码与结构流程图本实验为著名的生产者消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。生产者线程不断顺序地将0 到30的数字写入共享的循环缓冲区,同时消费者线程不断地从共享的循环缓冲区读取数据。四实验步骤及程序1、启动虚拟机 2、进入vi编辑器,键入i进入编辑模式,输写程序:Makefile程序:TOPDIR = ./include $(TOPDIR)Rules.makEXTRA_LIBS += -lpthreadEXEC= ./pthreadOBJS= pthread.oall: $(EXEC)$(EXEC): $(OBJS)$(CC) $(LDFLAGS) -o $ $(OBJS) $(EXTRA_LIBS)install:$(EXP_INSTALL) $(EXEC) $(INSTALL_DIR)clean:-rm -f $(EXEC) *.elf *.gdb *.oPthread.c程序:/* *The classic producer-consumer example. * Illustrates mutexes and conditions. * by Zou jian guo * 2003-12-22 */#include #include #include #include pthread.h#define BUFFER_SIZE 16/* Circular buffer of integers. */struct prodcons int bufferBUFFER_SIZE; /* the actual data */ pthread_mutex_t lock; /* mutex ensuring exclusive access to buffer */ int readpos, writepos; /* positions for reading and writing */ pthread_cond_t notempty; /* signaled when buffer is not empty */ pthread_cond_t notfull; /* signaled when buffer is not full */;/*-*/* Initialize a buffer */void init(struct prodcons * b) pthread_mutex_init(&b-lock, NULL); pthread_cond_init(&b-notempty, NULL); pthread_cond_init(&b-notfull, NULL); b-readpos = 0; b-writepos = 0;/*-*/* Store an integer in the buffer */void put(struct prodcons * b, int data) pthread_mutex_lock(&b-lock); /* Wait until buffer is not full */ while (b-writepos + 1) % BUFFER_SIZE = b-readpos) printf(wait for not fulln); pthread_cond_wait(&b-notfull, &b-lock); /* Write the data and advance write pointer */ b-bufferb-writepos = data; b-writepos+; if (b-writepos = BUFFER_SIZE) b-writepos = 0; /* Signal that the buffer is now not empty */ pthread_cond_signal(&b-notempty);pthread_mutex_unlock(&b-lock);/*-*/* Read and remove an integer from the buffer */int get(struct prodcons * b) int data;pthread_mutex_lock(&b-lock); /* Wait until buffer is not empty */ while (b-writepos = b-readpos) printf(wait for not emptyn);pthread_cond_wait(&b-notempty, &b-lock); /* Read the data and advance read pointer */ data = b-bufferb-readpos; b-readpos+; if (b-readpos = BUFFER_SIZE) b-readpos = 0; /* Signal that the buffer is now not full */ pthread_cond_signal(&b-notfull); pthread_mutex_unlock(&b-lock); return data;/*-*/#define OVER (-1)struct prodcons buffer;/*-*/void * producer(void * data) int n; for (n = 0; n %dn, n); put(&buffer, n); put(&buffer, OVER); printf(producer stopped!n); return NULL;/*-*/void * consumer(void * data) int d; while (1) d = get(&buffer); if (d = OVER ) break; printf( %d-getn, d); printf(consumer stopped!n); return NULL;/*-*/int main(void) pthread_t th_a, th_b; void * retval; init(&buffer); pthread_create(&th_a, NULL, producer, 0); pthread_create(&th_b, NULL, consumer, 0); /* Wait until producer and consumer finish. */ pthread_join(th_a, &retval); pthread_join(th_b, &retval); return 0;3、保存退出后,在终端输入: #make在上面的步骤完成后,我们就可以在pthread 目录下运行“make”来编译我们的程序了,如果进行了修改,重新编译则运行: # make clean# make五、 实验结果#cd /yms#gcc lpthread o pthread pthread.c# ./pthread结果:put-0put-1put-15wait for not full0-get1-get14-getwait for not emptyput-16put-17put-29wait for not full15-get16-get29-getwait for not emptyproducer stopped!consumer stopped!实验七 Linux 下socket 网络通信一、实验目的1.学习在Linux下进行网络通信的原理2.掌握基本的网络协议3.能够自己编写网络通信程序实现网络内主机的通信二、实验内容在PC机上编写一个网络程序,实现主机间的通信。客户端向服务端发送信息,服务端接受信息并显示。三实验步骤及程序1、启动虚拟机;2、新建终端-输入: #Cd /yms 一台机子做服务器端: #vi test8-2.c 输入服务器端程序,保存退出,执行 #gcc o test8-2 test8-2.c 另一台机子做客户端:#vi test8-1.c 输入客户端程序,保存退出,执行 #gcc o test8-1 test8-1.c #ifconfig /查看是否在同一端口,若不同,则改成相同的 #ifconfig eth0 (该IP为客户端所设IP地址) #ping 23 (查看是否连通,该IP为服务端IP地址)3、进入vi编辑器,键入i进入编辑模式,输写程序:服务器端程序:#include#include#include#include#include#include#include#include#define MYPORT 4500#define BACKLOG 10int main()int sockfd,newfd;struct sockaddr_in my_addr;struct sockaddr_in their_addr;int sin_size;sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd0) printf(create socket failed!); my_addr.sin_family=AF_INET;my_addr.sin_port=htons(MYPORT);my_addr.sin_addr.s_addr=INADDR_ANY;bzero(&(my_addr.sin_zero),8);if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)0) printf(bind ip error!n);return; if(listen(sockfd,BACKLOG)0) printf(listen error!n);return; for( ; ; ) sin_size=sizeof(struct sockaddr_in);newfd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size);if(newfd0) printf(accept failed!n);return; printf(this is the server!n);if(send(newfd,hello world!,14,0)0) printf(send error!);close(newfd);return; close(newfd);close(sockfd);return; 客户端程序:#include#include#include#include#include#include#include#include#define SERVER_PORT 4500#define MAXDATASIZE 100int main(int argc,char*argv) int sockfd,numbytes;char bufMAXDATASIZE;struct sockaddr_in their_addr;if(argc!=2) printf(client ip);return; sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd0) printf(create socket failed!); their_addr.sin_family=AF_INET;their_addr.sin_port=htons(SERVER_PORT);bzero(&(their_addr.sin_zero),8);if(inet_aton(argv1,&their_addr.sin_addr)=0) printf(hello world!n);return; if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr)0) printf(bind ip error!n);return; numbytes=recv(sockfd,buf,MAXDATASIZE,0);if(numbytes0) printf(receive number failed!n);return; bufnumbytes=0;printf(received:%sn,buf);close(sockfd);四、实验运行及结果服务器端执行 # ./test8-2 结果:this is the server!客户端执行 # ./test8-1 23结果:received: hello world!袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纪检监察监督管理办法
- 市政电力接入协议
- 2025年男科疾病诊断与治疗实战模拟答案及解析
- 2025年中级导游等级考试(汉语言文学知识)复习题及答案
- 出纳实务概述课件
- 全省地税系统XXXX年时事政治和业务知识考试复习题及答案
- 粉丝经济变现路径-洞察及研究
- 心脏移植配型技术-洞察及研究
- 2025年车辆购买合同
- 衡水金卷四省(四川云南)高三联考9月联考地理(含答案)
- 新疆生产建设兵团第六师五家渠市公开招聘事业单位317人(同步测试)模拟卷含答案
- 中小学学习《民法典》主题班会图文ppt
- 20客户画像与标签管理课件
- 领导干部个人有关事项报告表(2019版)(范本模板)
- 《公务员激励机制研究(论文)8000字》
- 相关方需求和期望分析表
- (中职)PLC实训课件完整版课件全套ppt教学教程(最新)
- QC成果施工现场移动式网络布设及监控一体化装置的研制
- 《发育生物学》课件第八章 胚轴的特化与体轴的建立
- 《传统与革新──从巴洛克艺术到浪漫主义》教案
- 《石油库设计规范》修订2022-07
评论
0/150
提交评论