linux期末复习题库Word下载.docx
- 文档编号:6060607
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:21
- 大小:22.37KB
linux期末复习题库Word下载.docx
《linux期末复习题库Word下载.docx》由会员分享,可在线阅读,更多相关《linux期末复习题库Word下载.docx(21页珍藏版)》请在冰点文库上搜索。
未初始化数据区
24.函数geteuid()用于得到进程的?
用户有效UID
25.当一个线程的属性设置为分离状态,该线程结束时立即释放它所占有的系统资源。
26.以下哪种方式属于异常终止一个进程(D)
A从main函数返回。
B调用exit。
C最后一个线程从其启动例程返回。
D接到一个信号并终止。
27.下列命令哪个是创建线程私有数据命令(A)
Apthread_key_create()Bpthread_setspecific()
Cpthread_getspecific()Dpthread_key_delete();
28.下面哪种通信方式适用于不同机器之间的进程通信。
(D)
A.消息队列B.共享内存C.信号量D.套接字
29.创建或打开消息队列的函数为(A)
A.msgget()B.msgsnd()C.msgrcv()D.msgctl()
30.什么是进程?
进程资源由哪两部分组成?
进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和调度的一个独立单位。
进程资源由内核空间资源(PCB控制块)和用户空间资源
31.linux中通过调用waitpid()函数得到进程的退出信息,该函数原型为
pid_twaitpid(pit_tpid,int*statloc,intoptions);
当第一个参数pid取值为-1时,表示(A)
A等待任一子进程退出,相当于wait()。
B等待进程组ID与调用进程组ID相同的任一子进程。
C只等待进程ID等于PID的子进程。
D等待指定进程组中的进程,该进程组id等于pid的绝对值。
32.pid_tfork()返回值的意义?
若执行成功,父进程中将返回子进程(新创建的进程)的PID,类型为pid_t,
子进程将返回0,以区别父子进程
若执行失败,则在父进程中返回-1,错误原因存储在errno中
33.Linux环境中使用kill函数向进程或进程组发送信号。
Kill函数原型为
intkill(pid_tpid,intsigno);
当第一个参数pid>
0时,表示(A)
A发送信号给进程ID为pid的进程;
B发送信号给进程组ID和该进程相同的进程;
C发送信号给进程组内进程ID为pid的绝对值的进程;
D发送信号给系统的所有进程;
34.共享主存基本操作(A)将共享主存区映射到进程虚拟地址空间。
Ashmat()Bshmdt()Cshmctl()Dshmget()
35.修改消息队列状态信息的命令是(B)
Amsgsnd()Bmsgctl()Cmsgrcv()Dmsgget()
36.父进程调用wait()可能出现的三种情况?
(5分)。
1.当有子进程退出时wait返回子进程的pid并且获取到子进程的退出状态
2.当没有子进程退出时父进程将阻塞等待子进程退出
3.当没有子进程时,wait返回-1
37.在进程中,return和exit()的区别?
如果是在main函数中exit和return都是终止进程但是return会弹栈exit不会
如果是在函数中return返回到上级函数调用的位置,exit会终止进程
38.什么是孤儿进程?
谁负责回收孤儿进程的内核空间资源?
父进程先于子进程结束则子进程称为孤儿进程由init0接管并回收其内核资源
39.僵尸进程是什么?
如何消灭僵尸进程?
僵尸进程子进程结束但是父进程未回收其内核资源,可以通过调用wait()或waitpid()或者使其成为孤儿进程由操作系统回收其内核资源
40.简述进程对可靠信号和不可靠信号的处理过程。
不可靠信号不支持排队如果在进程屏蔽信号时给其发送多个不可靠信号,在取消屏蔽后只会接收到一个
可靠信号支持排队如果在进程屏蔽信号时发送多个信号,在取消屏蔽后会按照先后顺序接收到所有可靠信号
41.简单介绍一下信号的定义及其分类。
信号是一种软中断,用来通知进程发生了异步事件0~31分为不可靠信号32~63可靠信号
42.简单介绍一下匿名管道及其特点。
匿名管道用于实现有亲缘关系的进程之间相互通信
创建在内核空间,通信结束后消失
43.请解释一下有名管道和匿名管道的区别?
无名管道用于实现具有亲缘关系的进程间通信
有名管道用于实现非亲缘关系的进程间通信
有名管道是一个特殊的文件结束通信后不会内容消失但文件不消失
无名管道结束通信后消失
44.什么是线程?
进程和线程的区别?
线程是操作系统进程中能够并发执行的实体,是处理器调度和分派的基本单位。
区别:
1.调度、
在传统操作系统中进程是拥有资源和调度的基本单位
在引入了线程的操作系统中线程是操作系统分派和调度的基本单位
进程是拥有资源的基本单位
2.并发性
进程之间可以并发执行,在同一进程中的线程也可以并发执行
3.拥有资源
进程是拥有系统资源的基本单位
线程基本上不拥有系统资源,但也拥有其运行所必要的资源,在同一进程中的线程共享进程的地址空间
4.系统开销
创建或撤销进程时,系统都要为其创建和回收进程控制块(PCB)
进程的创建和撤销的开销远大于线程的开销
在进程切换时,涉及到当前进程CPU环境的保存以及新被调度运行进程的CPU环境的设置,而线程的切换则仅需保存和设置少量寄存器内容
进程切换的开销也是远大于线程的
45.Pleasedescribethedifferenceofsignal()andsigaction()inbrief
不同点
signal()
安装的信号不能向信号处理函数传递信息
sigaction()
可设置进程的信号掩码,返回设置之前的sigaction结构
安装的信号可以向信号处理函数传递信息
相同点
都可以为指定的信号设置信号处理函数
共用同一个内核函数do_sigaction()
编程:
重点了解以下实验的程序
实验二,第一题,第二题,第六题
实验一
1.创建文件file1,写入字符串“abcdefghijklmn”;
2.创建文件file2,写入字符串“ABCDEFGHIJKLMN”;
3.读取file1中的内容,写入file2,使file2中的字符串内容为“abcdefghijklmnABCDEFGHIJKLMN”
创建file1,file2文件
IO_open.c源码
/*************************************************************************
>
FileName:
IO_open.c
>
作者:
YJK
Mail:
745506980@
CreatedTime:
2019年09月08日星期日19时58分23秒
************************************************************************/
#include<
stdio.h>
fcntl.h>
unistd.h>
string.h>
intmain(intargc,char*argv[])
{
intIO_OPEN,IO_OPEN_1;
//文件描述符
intwrite_num1,write_num2=-1;
char*buf="
abcdefghijklmn"
;
char*buf2="
ABCDEFGHIJKLMN"
if(argc<
3)
{
printf("
ERROR!
number<
3\n"
);
return-1;
}
IO_OPEN=open(argv[1],O_CREAT|O_RDWR,0755);
if(IO_OPEN==-1)
perror("
open"
);
IO_OPEN_1=open(argv[2],O_CREAT|O_RDWR,0755);
if(IO_OPEN_1==-1)
write_num1=write(IO_OPEN,buf,strlen(buf));
write_num2=write(IO_OPEN_1,buf2,strlen(buf2));
close(IO_OPEN);
close(IO_OPEN_1);
return0;
}
实现file1中的字符串写入file2中
IO_file_rw.c源码
intfd,fd2=-1;
intrd_num,rd_num2,wt_num=-1;
charbuf[128]={0};
charbuf1[128]={0};
ERROR!
\n"
if((fd=open(argv[1],O_RDONLY))==-1)//以读写方式打开file1
if((fd2=open(argv[2],O_RDWR))==-1)//打开file2
rd_num=read(fd,buf,128);
rd_num2=read(fd2,buf1,128);
/*先将file2文件中的字符串向后移动rd_num(file中的字符串长度)个位置*/
lseek(fd2,rd_num,SEEK_SET);
write(fd2,buf1,rd_num2);
lseek(fd2,0,SEEK_SET);
write(fd2,buf,rd_num);
/*lseek(fd2,0,SEEK_SET);
//先将file1中的字符串写入file2再将file2中的字符串追加到后面
write(fd2,buf1,rd_num2);
*/
close(fd2);
close(fd);
}
实验二
v编写代码,完成以下功能:
v1.创建新文件,该文件具有用户读写权限。
v2.采用dup/dup2/fcntl复制一个新的文件描述符,通过新文件描述符向文件写入“class_name”字符串;
v3.通过原有的文件描述符读取文件中的内容,并且打印显示;
IO_file.c文件源码
/************************************************************************
IO_file.c
2019年10月10日星期四20时50分55秒
***********************************************************************/
sys/stat.h>
intfd=-1;
intfd2=-1;
//新的文件描述符
intwrnum,rdnum=0;
移动一班--袁俊珂--1815925428\n"
umask(0);
//修改umask值
fd=open(argv[1],O_CREAT|O_RDWR,0600);
if(fd==-1)
//复制文件描述符
fd2=dup(fd);
//选取未被使用的最小的文件描述法
//fd2=dup2(fd,5);
//使用指定的文件描述符如果该文件描述符已被使用则关闭该文件描述符重新使用
//fd2=fcntl(fd,F_DUPFD,1);
//实现文件描述符复制,选择大于等于1的未被使用的文件描述符
wrnum=write(fd2,buf,strlen(buf));
//使用新的文件描述符写入字符串
if(wrnum==0)//如果写入失败
write"
//此时文件指针位于文件末尾
lseek(fd,0,SEEK_SET);
//将文件指针指向文件开始
rdnum=read(fd,buf1,128);
//使用老的文件描述符将文件中的信息读取到buf1中
if(rdnum==0)
read"
printf("
%s"
buf1);
//打印出读取的字符串
v编写程序完成以下功能:
v1.递归遍历/home目录,打印出所有文件和子目录名称及节点号。
v2.判断文件类型,如果是子目录,继续进行递归遍历,直到遍历完所有子目录为止。
IO_dirread.c源码
/************************************************************************
IO_dirread.c
2019年10月13日星期日20时40分56秒
dirent.h>
intdir_read(constchar*str);
dir_read(argv[1]);
intdir_read(constchar*str)
structstatbuf;
structdirent*dirp=NULL;
DIR*dir=NULL;
charBUF[512]={0};
if((dir=opendir(str))==NULL)
{
opendir"
}
while((dirp=readdir(dir))!
=NULL)
sprintf(BUF,"
%s%s%s"
str,"
/"
dirp->
d_name);
//获取目录的绝对路径
if(dirp->
d_name[0]=='
.'
)//跳过隐藏文件
continue;
if(stat(BUF,&
buf)==-1)//需要使用绝对路径
{
perror("
stat"
return-1;
}
if(S_ISDIR(buf.st_mode))//如果当前文件为目录,则递归查看其子目录
printf("
%s%ld\n"
BUF,dirp->
d_ino);
dir_read(BUF);
else
%s%ld\n"
d_name,dirp->
closedir(dir);
实验三,第二题,第三题
实验三
v创建子进程
v1.在子进程中打开文件file1,写入自己的“班级_姓名_学号”,
v2.父进程读取file1中的内容,并且打印显示。
v3.在父进程中获取已经结束的子进程的状态信息,打印该信息,并且打印结束的子进程的进程号。
IO_ptest1.c
2019年10月17日星期四20时56分57秒
wait.h>
stdlib.h>
sys/types.h>
inti;
pid_tpid,pid_wait=-1;
intstatus;
移动一班-袁俊珂-1815925428"
charBUF[128]={0};
if((pid=fork())==-1)
perror("
fork"
exit(EXIT_FAILURE);
if(pid==0)
if((fd=open("
myfile"
O_CREAT|O_RDWR,0777))==-1)//在子进程中打开文件
exit(EXIT_FAILURE);
}
if(write(fd,buf,strlen(buf))==-1)
exit(EXIT_SUCCESS);
else
pid_wait=wait(&
status);
//使父进程处于阻塞状态
if((WIFEXITED(status)))//判断子进程是否正常终止
normalexit,returnvalue:
%d\n"
WEXITSTATUS(status));
printf("
childPID:
%d\n"
pid_wait);
O_RDONLY))==-1)
parentopen"
if(read(fd,BUF,128)==-1)//读取文件
readmyfile:
%s\n"
BUF);
close(fd);
实验四,第三题
1.编写程序实现以下功能:
利用有名管道文件实现进程间通信,要求
写进程向有名管道文件写入10次“helloworld”;
读进程读取有名管道文件中的内容,并依次打印。
创建有名管道源码
IO_fifo.c
2019年10月27日星期日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 期末 复习 题库