山东科技大学linux考试试题_第1页
山东科技大学linux考试试题_第2页
山东科技大学linux考试试题_第3页
山东科技大学linux考试试题_第4页
山东科技大学linux考试试题_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE4-山东科技大学2016—2017学年第2学期《嵌入式系统开发及应用》考试题号一二三四总得分评卷人审核人得分一、选择题(共20分)1.对于Linux而言,所有对设备和文件的操作都使用文件描述符来进行。2.设置文件的存取权限,分为读、写和执行3类。每类分为用户、和系统权限。3.当打开一个流时,标准I/O函数返回一个指向文件流结构的指针。4.有3种类型的无格式I/O函数可用来读写流,它们是字符I/O、块I/O和行I/O。5.进程在其生存期内可能处于3种基本状态:就绪态、执行态和等待态。6.Linux支持UNIXSystemV中的3种进程间通信机制,它们是共享内存、消息队列和信号集。7.线程可分为用户态线程和内核态线程。8.TCP套接字定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数据传输。UDP套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输。二、程序填空题(共20分)1.下列是建立管道通信程序,父进程等待子进程退出。请补充完整。#defineMAX_DATA_LEN256intmain(){ pid_tpid; intpipe_fd[2]; charbuf[MAX_DATA_LEN]; chardata[]="PipeTestProgram"; intreal_read,real_write; memset((void*)buf,0,sizeof(buf)); if(pipe(pipe_fd)<0) { printf("pipecreateerror\n"); exit(1); } if((pid=fork())==0) { close(pipe_fd[1]); if((real_read=read(pipe_fd[0],buf,MAX_DATA_LEN))>0) printf("%dbytesreadfromthepipeis'%s'\n",real_read,buf); close(pipe_fd[0]); exit(0); }elseif(pid>0){ close(pipe_fd[0]); if((real_write=write(pipe_fd[1],data,strlen(data)))!=-1) printf("Parentwrote%dbytes:'%s'\n",real_write,data); close(pipe_fd[1]); wait(NULL); exit(0); }}2.下列是建立守护进程程序。请补充完整。intmain(){pid_tpid;inti,fd;char*buf="ThisisaDaemon\n";pid=fork();if(pid<0){printf("Errorfork\n");exit(1);}elseif(pid>0)(1);setsid();chdir("/");umask(0);for(i=0;i<getdtablesize();i++)(2);/*这时创建完守护进程,以下开始正式进入守护进程工作*/三、程序阅读题(20分)1.阅读程序,请写出程序实现的功能。#include<sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>voidmain(){ pid_tpc,pr; pc=fork(); if(pc==0) { printf("thisischildprocesswithpidof%d\n",getpid()); sleep(10); } elseif(pc>0) { pr=wait(NULL); printf("Icatchedachildprocesswithpidof%d\n",pr) } exit(0);}定义了两个进程描述符pc、pr,并创建了一个进程,在子进程中显示:thisischildprodesswithpidof,并使用getpid函数获得当前进程的进程标识号,父进程中等待子进程结束显示:Icatchedachildprocesswithpidof,使用wait等待子进程结束并获得退出状态值。2、阅读程序,增加注释并给出程序功能#include<stdio.h>#include<signal.h>#include<stdlib.h>intmain(intargc,char**argv){ doubley;//定义双精度变量 sigset_tintmask;//定义sigset_t结构中变量 inti,repeat_factor;//两个整形变量 if(argc!=2)//判断输入指令的个数是否满足要求 { printf("Usage:%srepeat_factor\n\a",argv[0]);//如果不满足,输出错误提示信息 exit(1);//退出 } if((repeat_factor=atoi(argv[1]))<1) repeat_factor=10;//使用atoi函数把字符串转换为整形,如果失败使repeat_factor赋值为10 sigemptyset(&intmask);//清空intmask sigaddset(&intmask,SIGINT); //把SIGINT信号增加到intmask中 while(1)//循环执行下边的代码 { sigprocmask(SIG_BLOCK,&intmask,NULL);//SIG_BLOCK表示加入SIG_INT到intmask中信号屏蔽 printf("SIGINTsignalblocked\n");//输出SIG_INT这个信号已经被屏蔽 for(i=0;i<repeat_factor;i++)//定义i从0开始,逐渐加一到repeat_factor的过程中执行下列代码 { printf("Blockedcalculationisfinished\n");//输出该行信息 sleep(2);//睡眠2秒 } sigprocmask(SIG_UNBLOCK,&intmask,NULL);//SIG_UNBLOCK表示intmask信号屏蔽集中删除信号 printf("SIGINTsignalunblocked\n");//输出此行信息,SIG_INT信号已被解除 for(i=0;i<repeat_factor;i++)//再次在从0到repeat_factor的过程中执行 {printf("Unblockedcalculationisfinished\n");//输出该行信息 } }exit(0);//程序退出}四、编程题(共40分)1.多进程编程:创建第一子进程并用exec函数列出当前文件夹中文件的详细信息;创建第二子进程并休眠5s退出;父进程收集第一子进程的退出信息并显示退出状态值;父进程多次判断第二子进程是否结束,如果未结束继续查询,如果结束收集其退出信息(waitpid函数)。#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<signal.h>#include<unistd.h>#include<sys/wait.h>voidhandle(intsig){ if(sig==SIGCHLD) { intpid; intstatus; while((pid=waitpid(-1,&status,NULL))>0) {} }}intmain(intargc,constchar*argv[]){ pid_tpid1,pid2,pr; inti; if(pid1=fork()<0) { printf("forkthefirstpid1error\n"); exit(1); } elseif(pid1==0) { exec(); exit(0); } else { pr=wait(NULL); printf("第一子进程的推出状态值:\n",pr); exit(0); if(pid2=fork()<0) { printf("forkthesecondpid2errpr\n"); exit(1); } if(pid2==0) { sl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论