搜档网
当前位置:搜档网 › 08-实验八Linux多线程应用程序设计实验

08-实验八Linux多线程应用程序设计实验

08-实验八Linux多线程应用程序设计实验
08-实验八Linux多线程应用程序设计实验

实验八Linux多线程应用程序设计实验.

一、实验目的

1. 了解Linux下多线程程序设计的基本原理;

2. 学习pthread 库函数的使用。

二、实验环境

预装Fedora10(内核版本2.4.x)的pc机一台,CVT-A8嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链。

三、实验内容

1. 编写thread 应用程序;

2. 编写Makefile 文件;

3. 下载并调试thread 应用程序。

四、实验要求

1、编写pthread程序源代码;

2、编写Makefile 文件;

3、用makefile编译thread 程序;

4、下载thread 程序到CVT-A8 中调试。

五、实验报告要求

1、每人一份实验报告;

2、实验报告中要求对每一步操作和出现的结果详细记录并解释;

3、你认为做好本实验应该注意哪些方面?

六、思考题

为什么要用多线程设计?

实验七:Linux多线程编程(实验分析报告)

实验七:Linux多线程编程(实验报告)

————————————————————————————————作者:————————————————————————————————日期:

实验七:Linux多线程编程(4课时) 实验目的:掌握线程的概念;熟悉Linux下线程程序编译的过程;掌握多线程程序编写方法。 实验原理:为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 1 多线程概念 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间。 使用多线程的理由之二是线程间方便的通信机制。同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。2多线程编程函数 Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义: typedef unsigned long int pthread_t; 它是一个线程的标识符。 函数pthread_create用来创建一个线程,它的原型为: extern int pthread_create((pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)); 第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。 函数pthread_join用来等待一个线程的结束。函数原型为: extern int pthread_join(pthread_t th, void **thread_return); 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。 函数pthread_exit的函数原型为: extern void pthread_exit(void *retval); 唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给thread_return。 3 修改线程的属性 线程属性结构为pthread_attr_t,它在头文件/usr/include/pthread.h中定义。属性值不能直接设置,须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数之前调用。 设置线程绑定状态的函数为pthread_attr_setscope,它有两个参数,第一个是指向属性结构的指针,第二个是绑定类型,它有两个取值:PTHREAD_SCOPE_SYSTEM(绑定的)和PTHREAD_SCOPE_PROCESS(非绑定的)。 另外一个可能常用的属性是线程的优先级,它存放在结构sched_param中。用函数pthread_attr_getschedparam和函数pthread_attr_setschedparam进行存放,一般说来,我们总是先取优先级,对取得的值修改后再存放回去。 4 线程的数据处理

查看程序的进程和线程实验报告

查看程序的进程和线程实验报告 篇一:程序实验2:11-多线程编程---实验报告 程序实验二:11-多线程编程实验 专业班级实验日期 5.21 姓名学号实验一(p284:11-thread.c) 1、软件功能描述 创建3个线程,让3个线程重用同一个执行函数,每个线程都有5次循环,可以看成5个小任务,每次循环之间会有随即等待时间(1-10s)意义在于模拟每个任务到达的时间是随机的没有任何的特定规律。 2、程序流程设计 3.部分程序代码注释(关键函数或代码) #include #include #include #define T_NUMBER 3 #define P_NUMBER 5 #define TIME 10.0

void *thrd_func(void *arg ) { (本文来自:https://www.sodocs.net/doc/6117568364.html, 小草范文网:查看程序的进程和线程实验报告) int thrd_num=(int)arg; int delay_time =0; int count =0; printf("Thread %d is staraing\n",thrd_num); for(count=0;count { delay_time =(int)(rand()*TIME/(RAND_MAX))+1; sleep(delay_time); printf("\tTH%d:job%d delay =%d\n",thrd_num,count,delay_time); } printf("%d finished\n",thrd_num); pthread_exit(NULL); } int main()

实验二顺序程序设计

实验二简单C程序设计—顺序结构 一、实验目的 1.掌握C语言中使用最多的一种语句――赋值语句的使用方法。 2.掌握各种类型数据的输入输出方法,能正确使用各种格式输出符。 二、实验内容和步骤 1.掌握各种格式输出符的使用方法。 #include int main() {int a,b; float d,e; char c1,c2; double f,g; long n,m; unsigned p,q; a=61;b=62; c1='a';c2='b'; d=3.56; e=-6.87; f=3156.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000; printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e); printf("f=%15.6f,g=%15.12f\nm=%ld,n=%ld\np=%u,q=%u\n",f,g,m,n,p,q); return 0; } (1)运行此程序并分析运行结果。 a,b都是以整型输出。C1c2以字符型输出。d,e以浮点型输出,数据长度都为6位,所以前面都有空格占位,加上小数点,数字或负号一共6位。 f以浮点型输出,数据长度为15位,小数位有6位,故前面有四个空格;g以浮点型输出,数据长度为15位,小数位有12位,故前面有一个空格;m,n都以长整型输出;p,q都以无字符型输出。 (2)在此基础上,修改程序的第9-14行: a=61;b=62; c1=a;c2=b; f=3156,890121;g=0.123456789; d=f;e=g; p=a=m=50000;q=b=n=-60000; 运行程序,分析运行结果。 把a,b的值依次赋给c1,c2,c1,c2的数据类型为字符型,根Ascll代码可知61对应=,62对应>;将f,g的值赋给d,e,d,e的数据类型为浮点型,且数据长度为6位,小数位有2位,故得出此结果;按照运算符的结合顺序可知程序把50000依次赋给了m,p,a,把-60000

LINUX实验报告

实验报告 ( 2014/ 2015 学年第一学期) 课程名称操作系统A 实验名称文件系统 实验时间2014 年12 月8 日指导单位计算机学院计算机科学与技术系 指导教师徐鹤 学生姓名王生荣班级学号B12040809 学院(系) 计算机学院专业软件工程

实验名称文件系统指导教师徐鹤 实验类型设计实验学时 2 实验时间2014.12.08 一、实验目的和要求 1. 学习LINUX系统下对文件进行操作的各种命令和图形化界面的使用方法。 2. 深入学习和掌握文件管理系统的基本原理和LINUX等操作系统下常用的系统调用,编写一个使用系统调用的例程。 3.实现一个文本文件的某信息的插入和删除 4.实现一个记录文件的某记录的插入和删除 二、实验环境(实验设备) Windows XP + VMWare + RedHat Linux 8

三、实验过程描述与结果分析 1. 目录/proc下与系统相关的文件和目录 (1) /proc/$pid/fd:这是一个目录,该进程($PID号码进程)每个打开的文件在该目录下有一个对应的文件。 例如:#ls /proc/851/fd 0 1 2 255 这表示,851号进程目前正在使用(已经打开的)文件有4个,它们的描述符分别是0、1、2、255。其中,0、1、2 依次分别是进程的标准输入、标准输出和标准错误输出设备。 (2)/proc/filesystems:该文件记录了可用的文件系统类型。 (3)/proc/mounts:该记录了当前被安装的文件系统信息 例如:#cat /proc/mount (4)/proc/$pid/maps:该文件记录了进程的映射内存区信息。 例如:#cat /proc/851/maps 2.常用命令讲解 ls 命令 用来查看用户有执行权限的任意目录中的文件列表,该命令有许多有趣的选项。例如: $ ls -liah * 22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile

《C语言程序设计实践教程》答案-完整版

4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体4.编译和连接 5.分号 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7.D 8.A 9.B 10.B 11.D 12.B 13.A或B 14.C 15.B

17.D 18.D 19.C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.n=1 5.-4 6.a=1,b= ,c=2 7.c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.11110000 14.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A

7.A 8.D 9.B 10.C 11.A 12.A 13.C 14.B 15.正确答案为:12345678 二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4.1 5.13 6.(cx=getchar())!=-1 front=cx; 7.m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D

实验2顺序结构程序设计

《C语言程序设计》实验报告 ---------------------------------------------------------------------------------------------- 实验2顺序结构程序设计 一、实验目的 (1)掌握C语言中赋值语句的使用方法。 (2)掌握各种类型数据的输入与输出方法,能正确使用各种格式转换符。(3)掌握C语言的顺序结构程序设计。 二、实验内容与步骤 1.输入程序,观察程序运行结果 (1)输入并运行下面的程序,掌握用scanf()函数输入多个整型数据时,格式说明中无分隔符的正确使用。 /*c2-1.c*/ #include int main() { int i,j; printf("Enter i,j\n"); scanf("%d%d",&i,&j); printf("i=%d,j=%d\n",i,j); return 0; } 总结与反思: 1.printf("Enter i,j\n");语句是对下面的输入语句起提示作用;2. 本题在scanf()语句中,输入两个整数之间可用空格、Tab或回车键分隔,但用其他的分隔符不能得到正确的值。 (2)输入并运行下面的程序,掌握用scanf()函数输入多个整型数据时,格式说明中逗号分隔符的正确使用。 /*c2-2.c*/ #include int main() { int i,j; printf("Enter i,j\n");

scanf("%d,%d",&i,&j); printf("i=%d,j=%d\n",i,j); return 0; } 总结与反思:本题在scanf()语句中,输入两个整数之间必须用逗号分割,用 其他的分隔符时第一个变量能得到正确的值,第二个变量不能得到正确的值。(3)输入并运行下面的程序,掌握格式scanf()函数中普通字符按原样输入的使用方法。 /*c2-3.c*/ #include int main() { float i,j; scanf("i=%f,j=%f",&i,&j); printf("i=%.3f,j=%.3f\n",i,j); return 0; } 总结与反思:用scanf()函数输入内容,必须严格按照格式说明部分进行键入。 (4)输入并运行下面的程序,如果scanf()函数中格式与变量类型的对应关系错误,将不能得到正确的结果。 /*c2-4.c*/ #include int main() { int i,j; scanf("%f,%f",&i,&j); printf("i=%d,j=%d\n",i,j); return 0; } 总结与反思:1.与int(基本整型)对应的应是%d,与float(浮点型)对应的是%f。 2.scanf()函数格式说明应与定义的变量类型一致! (5)输入一个大写字母A,将它转换为小写字母a,输出小写字母a及对应的ASCII码值97,要求输出格式为“j=a,j=97”,完善下面程序中的输出语句。 /*c2-5.c*/ #include int main() { int j;char i; scanf("%c",&i); j=i+32; printf("j=%c,j=%d\n",j,j);

c程序设计教程与实验__吉顺如__实验一到七

实验1熟悉Visual C++环境及运行C程序 一、实验目的 1.掌握在Visual C++环境下C程序的建立、编辑、编译和执行过程。 2.掌握C程序的最基本框架结构,完成简单程序的编制与运行和调试。 3.掌握发现语法错误、逻辑错误的方法以及排除简单错误的操作技能。 二、实验内容 1.从键盘输入两个数a和b,求它们的平方和,并在屏幕上输出。输入该C程序,编译并运行之,记下屏幕的输出结果,以文件名保存。 #include <> main() { int a,b,sum; /*定义整型变量a、b、sum */ printf("Please Input a,b \n "); /*输出提示信息*/ scanf("%d%d",&a,&b); /*从键盘输入两个整数分别赋予a和b*/ sum=a*a+b*b; /*赋值语句,把a2+b2的结果赋给变量sum*/ printf("%d*%d+ %d*%d=%d\n",a,a,b,b,sum); /*输出语句*/ }

改错题 (1计算x*y 的值并将结果输出。试纠正程序中存在的错误,以实现其功能。程序以文件名保存。 #include <> main main () { int x=2;y=3;a int x=2,y=3,a ; A=x*y a =x*y ; print ('a=%d",A); print f ("a=%d",a ); printf("\n"); } (2)下程序的功能为:求两数中的较大数据并输出。纠正程序中存在的错误,以实现其功能。程序以文件名保存。 #include <> viod main() void main() { int a ,b , max; Scanf(“%d,%d ”,&a,&b); s canf(“%d,%d ”,&a,&b); Max=a; m ax=a; If (max

实验二+顺序结构程序设计

实验二顺序结构程序设计 一、实验学时 2学时 二、实验目的 (一)掌握简单结构的C语言程序设计; (二)掌握输入、输出函数的正确使用。 三、预习要求 熟悉并掌握scanf()函数,printf()函数,getchar()函数和putchar()函数的语法格式,比较它们在使用时的异同。 四、实验内容 (一)输入并运行下面的程序,掌握scanf()函数输入多个整型数据时,格式说明中无分隔符的正确使用。 main ( ) { int i,j; scanf("%d%d",&i,&j); printf("i=%d,j=%d\n",i,j); } 注意:运行程序时,当调用格式输入函数scanf()时,首先返回用户屏幕,等待用户从键盘上输入两个整数并回车,程序才能继续向下执行。 从键盘上为变量i,j赋值32和18时,两个整数之间可用空格、Tab或回车键分隔。试一试,用其它的分隔符输入时各个变量,能否得到正确值。 (二)输入并运行下面的程序,观察与上一程序的区别。注意:printf("Enter i,j\n");语句对下面的输入语句起提示作用。 main ( ) { int i,j; printf("Enter i,j\n"); scanf("%d%d",&i,&j); printf("i=%d,j=%d\n",i,j); } 注意:运行程序时,先执行printf("Enter i,j\n");,当调用格式输入函数scanf()时,返回用户屏幕,屏幕上会有提示Enter i,j,等待用户从键盘上输入两个整数。 (三)输入并运行下面的程序,掌握scanf()函数输入多个整型数据时,格式说明中逗号分隔符的正确使用。 main ( ) { int i,j; printf("Enter i,j\n"); scanf("%d,%d",&i,&j); printf("i=%d,j=%d\n",i,j); }

实验四 同步与互斥 Linux实验报告

实验四同步与互斥 【实验目的和要求】 1、掌握进程(线程)的同步与互斥。 2、掌握生产者消费者问题的实现方法。 3、掌握多线程编程方法。 【实验内容】 实现生产者消费者问题 1、有一个仓库,生产者负责生产产品,并放入仓库,消费者会从仓库中拿走产品(消费)。 2、仓库中每次只能入一个(生产者或消费者)。 3、仓库中可存放产品的数量最多10个,当仓库放满时,生产者不能再放入产品。 4、当仓库空时,消费者不能从中取出产品。 5、生产、消费速度不同。 【实验原理】 1、信号量mutex提供对缓冲池访问的互斥要求并初始化为1,信号量empty和 full分别用来表示空缓冲项和满缓冲项的个数,信号量empty初始化为n,信号量full初始化为0。 2、定义如下结构及数据: 定义缓冲区内的数据类型:typedef int buffer_item; 缓冲区:buffer_item buffer[BUFFER_SIZE];

对缓冲区操作的变量:int in,out; 信号量mutex提供了对缓冲池访问的互斥要求:pthread_mutex_t mutex; 信号量empty和full分别表示空缓冲顶和满缓冲顶的个数:sem_t empty,full; 可以设定生产者的生产速度及消费者的消费速度:int pro_speed,con_speed; 对缓冲区操作的自增函数:#define inc(k) if(k < BUFFER_SIZE) k = k+1;else k=0 3、并定义了如下实现问题的函数模块: 将生产的产品放入缓冲区: int insert_item(buffer_item item) 从缓冲区内移走一个产品: int remove_item(buffer_item *item) 生产者进程:void *producer(void *param) 消费者进程:void *consumer(void *param) 生产者结构进程消费者结构进程 【程序代码】 //sx.c #include

linux操作系统实验报告

LINUX操作系统实验报告 姓名 班级学号 指导教师 2011 年 05月 16 日 实验一在LINUX下获取帮助、Shell实用功能 实验目的: 1、掌握字符界面下关机及重启的命令。 2、掌握LINUX下获取帮助信息的命令:man、help。 3、掌握LINUX中Shell的实用功能,命令行自动补全,命令历史记录,命令的排列、替

换与别名,管道及输入输出重定向。 实验容: 1、使用shutdown命令设定在30分钟之后关闭计算机。 2、使用命令“cat /etc/cron.daliy”设置为别名named,然后再取消别名。 3、使用echo命令和输出重定向创建文本文件/root/nn,容是hello,然后再使用追加重定向输入容为word。 4、使用管道方式分页显示/var目录下的容。 5、使用cat显示文件/etc/passwd和/etc/shadow,只有正确显示第一个文件时才显示第二个文件。 实验步骤及结果: 1.用shutdown命令安全关闭系统,先开机在图形界面中右击鼠标选中新建终端选项中输入 命令Shutdown -h 30 2、使用命令alias将/etc/cron.daliy文件设置为别名named,左边是要设置的名称右边是要更改的文件。查看目录下的容,只要在终端输入命令即可。取消更改的名称用命令unalias 命令:在命令后输入要取消的名称,再输入名称。 3.输入命令将文件容HELLO重定向创建文本文件/root/nn,然后用然后再使用追加重定向输入容为word。步骤与输入容HELLO一样,然后用命令显示文件的全部容。 4.使用命令ls /etc显示/etc目录下的容,命令是分页显示。“|”是管道符号,它可以将多个命令输出信息当作某个命令的输入。

linux使用多线程解决“读者—写者”问题实验报告

计算机科学与技术系 实验(项目)报告 一、基本信息 二、目的与要求 目的: 通过实验掌握Linux环境下多线程程序的开发方法。 要求: 1.掌握线程的基本概念及操作; 2.掌握线程间通信的基本方法; 3.掌握Linux环境下多线程程序的开发方法及步骤。 三、完成实验(项目)过程和效果 内容: 1.问题分析; 有100个读线程和100个写线程共同读、写文件 (1)允许多个reader同时读一个文件; (2)当有一个reader在读文件时,不允许writer写文件; (3)当有一个writer在写文件时,不允许reader读文件,也不允许其 他writer写文件。

2.程序实现; 3.程序的调试与运行。 步骤: 1.问题分析 可以利用读写锁解决读者-写者问题 2.程序实现 1)读者: void *Reader(void *id) { RandomSleep(); pthread_rwlock_rdlock(&rwlock); ReaderNum++; ReadFile(*((int *)id)); ReaderNum--; pthread_rwlock_unlock(&rwlock); } 2)写者: void *Writer(void *id) { RandomSleep(); pthread_rwlock_wrlock(&rwlock); WriterNum++; WriteFile(*((int *)id)); WriterNum--;

pthread_rwlock_unlock(&rwlock); } 3)线程的创建: for(i=0; i

实验一 顺序结构程序设计

实验一顺序结构程序设计 一、实验目的 1. 掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。2 2. 学会使用有关算术运算符,以及包含这些运算符的表达式。 3. 掌握数据的输入输出方法,能正确使用各种格式转换符。 二、实验学时数 4学时 三、实验内容和步骤 1..启动TC 2.0编译系统,进入编辑界面,建立一个新文件。文件名自定。(要求每个学生建立一个自己的文件夹,每个同学的练习和作业的源程序命名形成系列,便于检查、查找和考核)。 利用一个小程序验证常量、变量的使用方法与特点,验证数据类型和表达式值的计算规则及其输出格式。 参考程序: main( ) { char c1,c2; c1=97;c2=98; printf(″%c,%c\n″,c1,c2); } (1)在此基础上加入以下printf语句,并运行。 printf(″%d,%d\n″,c1,c2); (2)将第二行改为以下语句,并运行。 int c1,c2; (3)将第三行改为以下语句,并运行。 c1=300;c2=400; 分别写出三次运行结果。 2.编程并调试运行 (1)编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf 函数输出这两个字符。上机运行此程序,比较putchar和printf函数输出字符的特点。 (2)试编写程序,从键盘输入一个大写字母,要求改用小写字母输出。 3.写出下面程序的运行结果: 1)main() { int x=1,y=1,z=1; y=y+x; x=x+y; printf(″%d\n″,x); printf(″%d\n″,y); } 2) main()

linux实验报告

实验一 实验名称:Linux 基本命令的使用 实验时间:2学时 实验目的:熟练使用Linux字符界面、窗口系统的常用命令。 实验内容 (一)Linux操作基础 1.重新启动linux或关机(poweroff,shutdown,reboot,init 0,init 6) 2.显示系统信息(uname),显示系统日期与时间,查看2014年日历(date,cal) ①uname:查看系统与内核相关信息 uname -asrmpi 参数: -a :所有系统相关的信息; -s: 系统内核名称; -r: 内核的版本; -m:本系统的硬件名称,如i686或x86_64; -p: CPU的类型,与-m类似,只是显示的是CPU的类型; -i :硬件的平台(ix86). ②date:显示日期的命令 ③cal:显示日历 单独cal:列出当前月份的日历 cal 2014:列出2014年的日历 cal 5 2014:列出2014年五月的目录 3.使用帮助命令(man,help) ①man:是manual(操作说明)的简写,是在线帮助系统 man后跟某个命令就会详细说明此命令,例如:man man就会详细说明man 这个命令的用法; ②help:也是帮助命令,一般会在命令后,例如:cd --help 就会列出cd命令的使用说明。 4.查看当前登陆用户列表(who),显示当前用户(whoami) ①who:显示目前已登录在系统上面的用户信息; ②whoami:查询当前系统账户 5.建立一个新用户mytest,设定密码(useradd,passwd) ①useradd mytest(建立新用户mytest);

Linux操作系统实验实验报告

实验1:安装L i n u x系统 【实验目的和要求】:安装Linux系统,掌握操作系统的系统配置,建立应用环境的过程。 【实验内容】: 1、首先在windows系统中安装虚拟机。在网上找到VMwareWorksttionPro版本, 确定安装目录。一直下一步,不需要太多的说明。 2、 图为安装完成后的界面。 3、然后在阿里巴巴开源镜像网站下载centos系统镜像,然后虚拟机创建新的虚 拟机, 进行一些简单的虚拟机设置,设置了网络链接nat模式等等。 安装完成后的界面 实验2:Linux下c语言开发 【实验目的】:学会和掌握用c语言开发一个应用程序的全过程,包括,编译,调试等等。

【实验步骤】:首先在系统中查看是否已经安装有gcc,输入查看命令发现没有,于是需要安装gcc。在centos系统中可以使用比较简便的yum命令。在之前已经配置好了yum源。直接输入yuminstallgcc。回车自动安装程序和需要的依赖包。 因为虚拟机中和电脑很多地方切换使用不方便,所以安装了xshell软件。图为xshell中的截图。

安装完毕。然后使用vi或者vim编写 运行,在屏幕上打印出hello,world。 实验3:进程创建 【实验目的和要求】1.了解进程的概念及意义;2.了解子进程和父进程 3.掌握创建进程的方法。 【实验内容】1.子进程和父进程的创建; 2.编写附件中的程序实例 【实验步骤】一1、打开终端,输入命令,在文件中输入中的代码; 2、输入命令,回车后显示无错误; 3、输入命令:./1_fork运行程序。 二、1、打开终端,输入命令,在文件中输入中的代码; 2、输入命令,回车后显示无错误: 3、输入命令:./2_vfork运行程序。 从上面可以看到两次的运行结果不一样。我们知道write函数是不带缓存的。因为在fork之前调用write,所以其数据写到标准输出一次。但是,标准I/O库是带缓存的。如果标准输出连到终端设备,则它是行缓存的,否则它是全缓存的。当以交互方式运行该程序时,只得到printf输出的行一次,其原因是标准输出缓存由新行符刷新。但是当将标准输出重新定向到一个文件时,却得到printf输出行两次。其原因是,在fork之前调用了printf一次,当调用fork时,该行数据仍在缓存中,然后在父进程数据空间复制到子进程中时,该缓存数据 也被复制到子进程中。于是那时父、子进程各自有了带该行内容的缓存。在exit 之前的第二个printf将其数据添加到现存的缓存中。当每个进程终止时,缓存中的内容被写到相应文件中。

3、顺序程序设计作业

实验3 顺序程序设计 一、实验目的 1.学习编写简单的C程序。 2.在编写和调试程序的过程中,培养发现问题、分析问题、解决问题的能力。 3.掌握程序的基本组成:说明数据、输入数据、加工数据、输出数据。 二、实验预备知识 1.C语言的各种数据类型; 2.C语言的各种运算符和表达式; 3.C程序中各种数据的输入和输出。 三、实验内容 编写程序,实现以下功能。 1.由键盘任意输入一个圆的半径,计算其面积。 2.由键盘任意输入一个三角形的3条边,计算其面积。 3.由键盘任意输入一个长方体的长、宽、高,计算体积。 4.由键盘任意输入一个圆柱的半径和高,计算其底面积、表面积、体积。 5.由键盘任意输入4门课程的成绩,计算它们的平均成绩。 6.由键盘任意输入一个数字字符(‘0’-‘9’),将其转换为数字输出。 7.由键盘任意输入1个大写字母,将其转化为小写字母后输出。 8.由键盘任意输入银行存款本金、存款年利率、存款年限、利息税,计算本金和利息总和。9.由键盘任意输入2个数据,将它们交换后输出。 10.由键盘任意输入1个4位数整数,分别输出其中的个位、十位、百位、千位。 四、实验分析 1.分析并总结不同数据类型的数据,它们的表示形式、表示范围、机内所占字节的数量、可以进行的运算的不同。 2.当表达式中出现了多种运算符时,应特别注意它们的优先级和结合性。 3.正确使用格式输入和输出函数中的各种格式符。 4.掌握顺序程序设计的方法。 五、实验报告 1.在实验过程中,将每一个程序的源代码保存,如1.C、2.C、3.C、。。。。。。、10.C。 2.建立本人学号和姓名为名称的文件夹,如:2014211234王军-3,将每一个程序的源代码存入此文件夹(删除其他所有文件,只保留.C 的源程序文件,并且压缩)。 3.将此文件压缩文件上传到:学生交作业\2015春C语言程序设计作业\第3次作业\机械14-1。

操作系统实验报告(包括线程,进程,文件系统管理,linux+shell简单命令)

操作系统实验报告 班级:030613 学号:03061331 姓名:裴帅帅

实验一:进程的建立 一、实验内容 创建进程及子进程,在父子进程间实现进程通信,创建进程并显示标识等进 程控制块的属性信息,显示父子进程的通信信息和相应的应答信息。 使用匿名管道实现父子进程之间的通信。 二、源程序 1、创建匿名管道 SECURITY_ATTRIBUTES sa; sa.bInheritHandle=true; sa.lpSecurityDescriptor=NULL; sa.nLength=sizeof(SECURITY_ATTRIBUTES); if(!CreatePipe(&m_hRead,&m_hWrite,&sa,0)) { MessageBox("创建匿名管道失败"); return false; } 2、创建子进程 STARTUPINFO si; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); si.dwFlags=STARTF_USESTDHANDLES; si.hStdInput=m_hRead; si.hStdOutput=m_hWrite; si.hStdError=GetStdHandle(STD_ERROR_HANDLE); if(!CreateProcess(NULL,"子 进.exe",NULL,NULL,true,0,NULL,NULL,&si,&pi)) { MessageBox("创建子进程失败"); CloseHandle(m_hRead); CloseHandle(m_hWrite); m_hRead=NULL; m_hWrite=NULL; return; } 3、销毁子进程 if(m_hRead) CloseHandle(m_hRead);

C语言程序设计项目教程习题答案资料

C语言程序设计项目教程— 习题答案 说明:本文档在“文档结构图”视图方式下应用比较方便。 第1章第2章第3章第4章第5章第6章第7章第8章第9章 第1章 1. 什么是软件?软件有哪些特点? 答:软件是程序、数据及其相关文档的完整集合。 软件具有以下特点: ①软件是一种逻辑产品,它以程序和文档的形式出现,保存在计算机的存储器中(磁盘或光盘),通过计算机的运行才能体现它的功能和作用。 ②软件产品的生产主要是研制。 ③软件产品不会用坏,不存在磨损、消耗的问题,但是软件在使用过程中,往往需要根据用户需求变化或软硬件环境的变化对软件进行修改,这种修改被称为软件维护。 ④软件产品的生产主要是脑力劳动。 ⑤软件的费用是不断增加的,软件成本相当昂贵。 2. 什么是软件工程? 答:软件工程是一门用工程化方法,指导计算机软件开发和维护的学科,它采用工程的概念、原理、技术和方法来开发、维护以及管理软件。 3. 什么是软件生命周期?软件生命周期包括哪些阶段? 答:软件生命周期是指从开发软件概念的提出起,直到该软件的使用、失去使用价值而被废弃的整个过程,也可以称作软件生存周期。 软件生命周期包括可行性研究与计划制订、需求分析、软件设计、软件实现、软件测试、运行与维护。

4. 什么是软件开发模型? 答:软件开发模型是软件开发全部过程、活动和任务的结构框架。 5. 写出数据结构的概念。 答:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储、组织数据的方式。数据结构主要研究和讨论数据的逻辑结构、存储结构和数据的运算。 6. 填空: ⑴数据结构包括逻辑结构、存储结构和数据的运算三个方面。 ⑵据结构的逻辑结构包括线性结构和非线性结构两大类。 ⑶据结构的存储结构包括顺序存储结构、链式存储结构、索引存储结构和散列存 储结构四类。 ⑷表是一种采用链式存储结构的线性表。 7. 什么是算法?算法有哪些特性? 答:算法是解决问题所采取的步骤和方法。算法具有以下特性:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 8. 什么是算法的时间复杂度?什么是算法的空间复杂度? 答:时间复杂度是指执行算法所耗费的时间。空间复杂度是指算法在计算机内执行时所占用的内存开销规模。 9~12. DCDA 13. 分别用流程图、N-S图描述以下问题的算法。 (1)输入一个年份,判断是否为闰年。 提示:闰年的判断条件为:①能被4整除,但不能被100整除;②能被400整除。满足两个条件之一,即为闰年。

汇编实验2 顺序程序设计

汇编实验二顺序结构程序设计 实验目的: (1)掌握汇编语言程序上机过程。 (2)掌握顺序结构程序调试的方法。 实验内容: 调试查表程序 内存中自TABLE开始的七个单元中连续存放着自然数0~6的立方值(立方值表), 任一个数X(0≤X≤6)在FIRST单元中,要求查表找出X的立方值,存SECOND 单元。 准备工作: 1.进入D: 2.建立一个文件夹hb, 即d:\hb 3.将MASM和LINK复制到该文件夹中 4.单击“开始”-“程序”-“附件”-“命令提示符” 5.输入“d:\” 6.输入“cd hb” 操作步骤: 1.输入源程序: EDIT d:\hb\cb.asm 在EDIT编辑环境File菜单下选择Save存盘,选择Exit退出编辑环境

2.汇编源程序 A>MASM CB↙ Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Copr 1981,1988 All rights reserved. Object filename [CB.OBJ]:_↙ Source listing [NUL.LST]:↙ Cross-reference [NUL.CRF]:↙ 51394+389950 Bytes symbol space free 0 Warning Errors 0 Severe Errors A> 3.连接目标程序 A>LINK Microsoft (R) Overlay Linker Version 3.64 Copyright (C) Microsoft Corp 1983-1988. All rights reserved. Object Modules [.OBJ]:CB↙ Run File [NUL.MAP]:↙ Libraries [.LIB]: ↙ 显示0个错误才能进行下一步LINK操作 4.执行程序 A>B 没有任何结果输出,原因是程序中没有安排显示输出,结果保存在内存单元中。 5.用DEBUG调试并查看运行结果 A>DEBUG CB.EXE

Linux实验报告

燕山大学 Linux技术上机实验指导

实验一Linux系统安装与简单配置 一、实验目的 1.掌握Linux系统安装的分区准备。 2.掌握Linux系统的安装步骤。 3.掌握Linux系统分区的挂载和卸载。 4.掌握Linux系统的启动和关闭操作。 二、实验内容 1.安装VMware虚拟机,设置光盘驱动器,为Linux系统安装做准备。2.在虚拟机下安装Linux操作系统(如Ubuntu桌面版本)。 3.配置Linux系统运行环境。 4.利用空闲分区创建新的Linux系统分区。 5.将新的Linux系统分区挂载到系统中;卸载新挂载的分区,重新挂载到目录树中的其他位置。 三、主要的实验步骤 1.制定安装系统的分区计划。 2.配置光驱引导镜像文件iso,启动系统,开始安装过程。 3.根据安装计划,对磁盘空间进行分区设置。 4.根据系统安装指导,完成Linux系统的安装过程。 5.安装成功后,退出系统,重新启动虚拟机,登陆Linux操作系统。6.对Linux系统进行配置,如网络设备等。 7.利用磁盘使用工具和mount,将新创建的Linux系统分区挂载到系统中。将新挂载的分区卸载,并重新挂载到目录树的其他位置。

实验二Linux常用命令使用 一、实验目的 1.掌握Linux一般命令格式。 2.掌握有关文件和目录操作的常用命令。 3.熟练使用man命令。 二、实验内容 1.熟悉cd、date、pwd、cal、who、echo、clear、passwd等常用命令。2.在用户主目录下对文件进行操作:复制一个文件、显示文件内容、查找指定内容、排序、文件比较、文件删除等。 3.对目录进行管理:创建和删除子目录、改变和显示工作目录、列出和更改文件权限、链接文件等。 4.利用man命令显示date、echo等命令的手册页。 5.显示系统中的进程信息。 三、主要实验步骤 1.登陆进入系统,修改个人密码。 2.使用简单命令:date、cal、who、echo、clear等,了解Linux命令格式。

操作系统实验报告理解Linux下进程和线程的创建并发执行过程。

操作系统上机实验报告 实验名称: 进程和线程 实验目的: 理解unix/Linux下进程和线程的创建、并发执行过程。 实验内容: 1.进程的创建 2.多线程应用 实验步骤及分析: 一、进程的创建 下面这个C程序展示了UNIX系统中父进程创建子进程及各自分开活动的情况。 fork( ) 创建一个新进程。 系统调用格式: pid=fork( ) 参数定义: int fork( ) fork( )返回值意义如下: 0:在子进程中,pid变量保存的fork( )返回值为0,表示当前进程是子进程。 >0:在父进程中,pid变量保存的fork( )返回值为子进程的id值(进程唯一标识符)。 -1:创建失败。 如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(parent process)的副本,称为子进程(child process)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。 2、参考程序代码 /*process.c*/ #include #include main(int argc,char *argv[]) { int pid; /* fork another process */ pid = fork(); if (pid < 0) { /* error occurred */ fprintf(stderr, "Fork Failed"); exit(-1);

相关主题