还剩4页未读,继续阅读
文本内容:
山东科技大学学年第学期2016—20172《嵌入式系统开发及应用》考试题号四总得分评卷人审核人--------------得分
一、选择题(共分)20对于而言,所有对设备和文件的操作都使用文件描述符来进行
1.Linux设置文件的存取权限,分为读、写和执行类每类分为用旦、和系统权限
2.3当打开一个流时,标准函数返回一个指向文件流结构的指针
3.I/O有种类型的无格式函数可用来读写流,它们是字符I/O、块I/O和行
4.3I/O I/O O进程在其生存期内可能处于种基本状态就绪态、执行态和等待态
5.3支持中的种进程间通信机制,它们是共享内存、消息队列—
6.Linux UNIXSystem V3和信号集线程可分为用户态线程和内核态线程
7.套接字定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序
8.TCP数据传输套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输UDP
二、程序填空题(共分)20下列是建立管道通信程序,父进程等待子进程退出请补充完整
1.()#define MAX_DATA_LEN256int main(pid_t pid;int pipe_fd
[2];char buf[M AX_D ATA_LEN];char data[]=Pipe TestProgram;int real_read,real_wri te;;memsetvoid*buf,0,sizeofbufifpipepipe_fd0printfHpipe createerror\nn;exitl;}ifpid=fork==0closepipe fd[l];ifreal_read=readpipe_fd[O],buf,MAX_DATA_LENOprintfn%d bytesread fromthe pipeis,%s,\nn,real_read,buf;closepipe_fd
[0];exitO;}else ifpid0{closepipe_fd
[0];ifreal_write=writepipe_fd
[1],data,strlendata!=-1printfnParent wrote%d bytes:,%s\nH,real_write,data;closepipe_fd[l];waitNULL;exitO;下列是建立守护进程程序请补充完整
2.int mainpid_t pid;int i,fd;char*buf=nThis isa Daemon\nH;pid=fork;ifpid0{printfnError fork\nn;exitl;else ifpid01setsid;chdirVn;umaskO;fori=0;igetdtablesize;i++2/*这时创建完守护进程,以下开始正式进入守护进程工作*/
三、程序阅读题(分)
20.阅读程序,请写出程序实现的功能1#includesys/types.h#includesys/wait.h#includeunistd.h#includestdio.h#includestdlib.hvoid mainpid_t pc,pr;pc=fork;if pc=O{printfnthis ischild process with pid of%d\nn,getpid;sleeplO;else ifpc0pr=waitNULL;printfnI catcheda childprocess with pid of%d\nH,pr}exit0;}定义了两个进程描述符、并创建了一个进程,在子进程中显示pc pr,this is并使用函数获得当前进程的进程标识号,父进程child prodesswithpidof,getpid中等待子进程结束显示使用等待子进I catcheda childprocesswithpidof,wait程结束并获得退出状态值、阅读程序,增加注释并给出程序功能2#include stdio.h#include signal.h#include stdlib.h int mainint argc,char**argv〃定义双精度变量double y;〃定义结构中变量sigset_t intmask;sigset_t两个整形变量int i,repeat_factor;//判断输入指令的个数是否满足要求ifargc!=2//{_如果不满足,输出错误提示信printfUsage:%s repeat_factor\n\a,argv
[0];//息〃退出exitl;ifrepeat_factor=atoiargv
[1]1使用函数把字符串转换为整形,如果失败使repeat_factor=10;//atoi赋值为repeat_factor10〃清空sigemptysetintmask;intmask〃把信号增加到中sigaddsetintmask,SIGINT;SIGINT intmask〃循环执行下边的代码whilel{一表示加入sigprocmaskSIG_BLOCK,intmask,NULL;//SIG_BLOCK」到中信号屏蔽SIG NTintmask、/;//输出」这个信号已经被屏蔽printfSIGINT signalblocked SIGNT〃定义从开始,逐渐加一到的过fori=0;irepeat_factor;i++i0repeat_factor程中执行下列代花、;〃输出该行信息printfBlocked calculationis finished〃睡眠秒sleep2;2}表示sigprocmaskSIG_UNBLOCK,intmask,NULL;//SIG_UNBLOCK信号屏蔽集中删除信号intmask输出此行信息,信号已被解printfSIGINT signalunblocked;//SIG_INT除_〃再次在从到的过程中执行fori=0;irepeat_factor;i++0repeat_factor〃输出该行信息printfUnblocked calculationis finished\n;}〃程序退出exit0;、编程题(共分)I
40.多进程编程创建第一子进程并用函数列出当前文件夹中文件的详细信息;创建第1exec二子进程并休眠退出;父进程收集第一子进程的退出信息并显示退出状态值;父进程多5s次判断第二子进程是否结束,如果未结束继续查询,如果结束收集其退出信息(函数)waitpid o#includestdio.h#includestdlib.h#includesys/types.h#includesignaLh#includeunistd.h#includesys/wait.h voidhandleint sigifsig==SIGCHLDint pid;int status;whilepid=waitpid-1,status,NULL0intmainintargc,const char*argv[]pid_t pid1,pid2,pr;int i;ifpid1=fork0printffork thefirst pid1error\n;exW;else ifpid1==0exec;exitO;elsepr=waitNULL;嚏一子进程的推出状态值printf\n,pr;exitO;ifpid2=fork0printffork thesecond pid2errpr\n;exit1;ifpid2==0sleep5;exitO;elseint ret;signalSIGCHLD,handle;while1sleep1;ret=killpid2,0;ifret0printfnthe childhas beendead\n;return0;。