Linux期末复习有参考答案.docx
- 文档编号:11403585
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:8
- 大小:20.23KB
Linux期末复习有参考答案.docx
《Linux期末复习有参考答案.docx》由会员分享,可在线阅读,更多相关《Linux期末复习有参考答案.docx(8页珍藏版)》请在冰豆网上搜索。
Linux期末复习有参考答案
Linux期末复习(有参考答案)
Linux期末复习
/Linux系统中条件变量需要和什么机制配合?
互斥锁。
多线程编程中,触发pthread_cond_wait返回的条件?
pthread_cond_signal()或pthread_cond_broadcast()唤醒,并且互斥锁在解锁状态。
3.不同进程共享相同文件表项的情况?
不同进程共享同一个文件表项
4.进程从main()函数开始执行,它的异常结束方式?
1.调用abort,产生SIGABRT信号2.接收到终止信号
5.在UNIX/Linux命令中实现标准输入重定向?
command6.文件要取消该文件的文件所有者的执行权限,同时增加该文件的同组用户的写权限,可以使用的命令?
chmodu-xfile;chmodg+wfile
/Linux系统中的标准错误的文件描述符值?
标准输入的文件描述符是0,标准输出是1,标准错误是28.调用fork函数后该函数返回值为0,1的意义?
0为子进程,1为父进程9.进程间通信的共享内存机制?
XSIIPC
10.指定所等待子进程的ID又可以请求内核返回子进程使用的资源情况汇总函数?
wait3,wait4
类函数中哪个可以通过环境变量PATH来指定路径?
execlp
12.调用lseek函数时,设置第三个参数为SEEK_CUR的意义?
将该文件的偏移量设置为距文件当前位置加offset个字节;/Linux系统中每个文件有9个文件权限位,按照访问文件的用户身份不同可以将这些文件权限位分为三个域,分别是哪些域?
文件所有者,同组用户,其他用户
14.在UNIX/Linux系统中C程序内存空间布局包括哪些段?
栈,堆,非初始化数据段,初始化数据段,正文段
/Linux系统为每个进程自动打开三个文件,是什么文件?
标准输入、标准输出和标准错误文件IPC机制包括哪些内容?
信号量,消息队列,内存共享
17.在UNIX/Linux系统中,为了在一个目录中创建一个新文件,必须对该目录具有什么权限?
写入权限和执行权限
18.进程和线程有哪些区别以及Linux系统提供了哪些线程同步机制?
1.线程是进程内的独立执行实体和调度单元。
进程有独立的地址空间,线程没有;线程是处理器调度的基本单位,但进程不是;进程是资源分配和拥有的单位,线程只能和同一个进程内的线程共享进程的资源.
2.互斥量,读写锁,条件变量
19.在UNIX/Linux系统中可以认为操作系统用了三张表来描述一个打开的文件,哪三张表?
这三张表各自描述了文件的哪些属性?
它们之间是如何联系起来的?
1.文件描述符表,文件表,索引节点表
2.文件描述符表:
文件描述符标志,指向一个文件表项的指针。
文件表:
文件状态标志,文件读写偏移量,指向该文件索引节点表项的指针。
索引节点表:
文件属性,数据块位置,当前文件长度。
3.通过指针指向对应表项
20.在UNIX/Linux系统中/etc/shadow文件用来存储用户密码,所有用户都可以通过执行passwd命令(/usr/bin/passwd)修改自己的秘密(修改/etc/shadow文件),但非root的其他用户对/etc/shadow文件没有读写权限。
为什么所有用户都可以通过执行passwd命令修改自己的密码(修改/etc/shadow文件)
这是因为用户执行“/usr/bin/passwd”命令时,/usr/bin/passwd文件设置了setuid位,在执行此程序时,该用户所拥有的权限等同于文件“/usr/bin/passwd”的拥有者root的权限,而root用户拥有对/ect/passwd文件写的权限,因此普通
用户可以通过/usr/bin/passwd来修改/etc/shadow文件的内容。
21.在UNIX系统下利用C语言编程,通过使用多线程和条件变量实现以下两个线程的同步工作:
线程A与线程B互斥地访问共享资源count(整形,全局变量,其初值为0)
线程A判断count的值是否大于0,如果大于0则执行count=count-1操作,循环往复
线程B执行count=count+1操作,循环往复在main函数中首先创建线程A,再创建线程B#include#include#include
pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/
pthread_cond_tcond=PTHREAD_COND_INITIALIZER;/*初始化条件变量*/
void*threadA(void*);void*threadB(void*);intcount=0;intmain(void){
pthread_tA; pthread_tB;
pthread_create(&A,NULL,threadA,(void*)NULL);/*创建进程A*/ pthread_create(&B,NULL,threadB,(void*)NULL);/*创建进程B*/ pthread_join(A,NULL);/*等待进程A结束*/ pthread_join(B,NULL);/*等待进程B结束*/ pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); exit(0);}
void*threadA(void*junk){
while
(1) {
pthread_mutex_lock(&mutex);/*锁住互斥量*/ if(count>0){ count-=1;}
pthread_cond_signal(&cond);/*条件改变,发送信号,通知进程*/
pthread_mutex_unlock(&mutex);/*解锁互斥量*/
printf(\
t_b
}
}
void*threadB(void*junk){
while
(1) {
pthread_mutex_lock(&mutex);
count+=1;
pthread_cond_wait(&cond,&mutex);/*解锁mutex,并等待cond改变*/
pthread_mutex_unlock(&mutex);}
22.在LInux系统下利用C语言编程,实现一个程序,该程序功能类似于一个简单的shell程序,其具体要求为:
从标准输入读取输入的命令名/可执行文件名,以回车作为命令/可执行文件名输入的结束,然后创建子进程执行对应的命令/可执行文件,此时程序本身不再进行任何操作直到当前命令/可执行文件执行结束为止;该程序一次只执行一条命令/可执行文件,不需要考虑输入输出重定向和管理,不需要考虑信号处理。
}
#include#include#include#include#include
intmain(intargc,char*argv){
if(argcpid_tpid;intstatus;
if((pid=fork())if(pid=0){
execl(\exit(0);
printf(\return0;
printf(\return0;
}else{}return0;
waitpid(pid,&status,0);
}
23.在Linux系统下利用C语言编程,实现一个程序,该程序可以实现ls-l命令的功能。
。
#include\#include\#include\#include\#include\
voidprint_error(char*errmsg){}
char*getformattime(time_tt)printf(\exit(0);
{ }
char*getuserinfo(uid_tmy_uid){
structpasswd*my_info;structgroup*grp;staticcharuserinfo[200];charusername[100];chargroupname[100];staticcharformattime[20];
structtm*lt;lt=localtime(&t);chartmptime[24];
memset(tmptime,0,sizeof(tmptime));
strftime(tmptime,24,\
strcpy(formattime,tmptime);returnformattime;
}
my_info=getpwuid(my_uid);strcpy(username,my_info->pw_name);
grp=getgrgid(my_info->pw_gid);if(!
grp){
strcpy(groupname,\
}else{}
strcat(username,\strcat(username,groupname);strcpy(userinfo,username);
strcpy(groupname,grp->gr_name);
returnuserinfo;
char*getinfo(char*path){
staticcharstr[1000];
structstatinfo;stat(path,&info);
strcpy(str,\
if(S_ISDIR(_mode)){
str[0]='d';
}elseif(S_ISCHR(_mode)){
str[0]='c';
}elseif(S_ISBLK(_mode)){
str[0]='b';
}else{}
str[0]='-';
if(_mode&S_IRUSR){}
if(_mode&S_IWUSR){}
str[2]='w';str[1]='r';
if(_mode&S_IXUSR){
str[3]='x';
}
if(_mode&S_IRGRP){}
str[4]='r';
if(_mode&S_IWGRP){}
str[5]='w';
if(_mode&S_IXGRP){}
str[6]='x';
if(_mode&S_IROTH){}
str[7]='r';
if(_mode&S_IWOTH){}
str[8]='w';
}
if(_mode&S_IXOTH){}
chartmp[20];str[9]='x';
strcat(str,\
sprintf(tmp,\strcat(str,tmp);
strcat(str,\
strcat(str,getuserinfo(_uid));
strcat(str,\
sprintf(tmp,\strcat(str,tmp);
strcat(str,\
strcat(str,getformattime(_mtime));returnstr;
intmain(intargc,char*argv){
if((dp=opendir(dir))==NULL){}
print_error(\if(argc!
=2){
charbuf[max_dir_length];if(getcwd(buf,max_dir_length)){
strcpy(dir,buf);DIR*dp;structdirent*dirp;
intmax_dir_length=sysconf(_PC_PATH_MAX);chardir[max_dir_length];
}else{}
print_error(\
}else{}
strcpy(dir,argv[1]);
e); }
closedir(dp);exit(0);}}
chartmp_dir[max_dir_length];while((dirp=readdir(dp))!
=NULL){
printf(\if(strcmp(dirp->d_name,\
strcpy(tmp_dir,dir);strcat(tmp_dir,\
Linux期末复习
/Linux系统中条件变量需要和什么机制配合?
互斥锁。
多线程编程中,触发pthread_cond_wait返回的条件?
pthread_cond_signal()或pthread_cond_broadcast()唤醒,并且互斥锁在解锁状态。
3.不同进程共享相同文件表项的情况?
不同进程共享同一个文件表项
4.进程从main()函数开始执行,它的异常结束方式?
1.调用abort,产生SIGABRT信号2.接收到终止信号
5.在UNIX/Linux命令中实现标准输入重定向?
command6.文件要取消该文件的文件所有者的执行权限,同时增加该文件的同组用户的写权限,可以使用的命令?
chmodu-xfile;chmodg+wfile
/Linux系统中的标准错误的文件描述符值?
标准输入的文件描述符是0,标准输出是1,标准错误是28.调用fork函数后该函数返回值为0,1的意义?
0为子进程,1为父进程9.进程间通信的共享内存机制?
XSIIPC
10.指定所等待子进程的ID又可以请求内核返回子进程使用的资源情况汇总函数?
wait3,wait4
类函数中哪个可以通过环境变量PATH来指定路径?
execlp
12.调用lseek函数时,设置第三个参数为SEEK_CUR的意义?
将该文件的偏移量设置为距文件当前位置加offset个字节;/Linux系统中每个文件有9个文件权限位,按照访问文件的用户身份不同可以将这些文件权限位分为三个域,分别是哪些域?
文件所有者,同组用户,其他用户
14.在UNIX/Linux系统中C程序内存空间布局包括哪些段?
栈,堆,非初始化数据段,初始化数据段,正文段
/Linux系统为每个进程自动打开三个文件,是什么文件?
标准输入、标准输出和标准错误文件IPC机制包括哪些内容?
信号量,消息队列,内存共享
17.在UNIX/Linux系统中,为了在一个目录中创建一个新文件,必须对该目录具有什么权限?
写入权限和执行权限
18.进程和线程有哪些区别以及Linux系统提供了哪些线程同步机制?
1.线程是进程内的独立执行实体和调度单元。
进程有独立的地址空间,线程没有;线程是处理器调度的基本单位,但进程不是;进程是资源分配和拥有的单位,线程只能和同一个进程内的线程共享进程的资源.
2.互斥量,读写锁,条件变量
19.在UNIX/Linux系统中可以认为操作系统用了三张表来描述一个打开的文件,哪三张表?
这三张表各自描述了文件的哪些属性?
它们之间是如何联系起来的?
1.文件描述符表,文件表,索引节点表
2.文件描述符表:
文件描述符标志,指向一个文件表项的指针。
文件表:
文件状态标志,文件读写偏移量,指向该文件索引节点表项的指针。
索引节点表:
文件属性,数据块位置,当前文件长度。
3.通过指针指向对应表项
20.在UNIX/Linux系统中/etc/shadow文件用来存储用户密码,所有用户都可以通过执行passwd命令(/usr/bin/passwd)修改自己的秘密(修改/etc/shadow文件),但非root的其他用户对/etc/shadow文件没有读写权限。
为什么所有用户都可以通过执行passwd命令修改自己的密码(修改/etc/shadow文件)
这是因为用户执行“/usr/bin/passwd”命令时,/usr/bin/passwd文件设置了setuid位,在执行此程序时,该用户所拥有的权限等同于文件“/usr/bin/passwd”的拥有者root的权限,而root用户拥有对/ect/passwd文件写的权限,因此普通
用户可以通过/usr/bin/passwd来修改/etc/shadow文件的内容。
21.在UNIX系统下利用C语言编程,通过使用多线程和条件变量实现以下两个线程的同步工作:
线程A与线程B互斥地访问共享资源count(整形,全局变量,其初值为0)
线程A判断count的值是否大于0,如果大于0则执行count=count-1操作,循环往复
线程B执行count=count+1操作,循环往复在main函数中首先创建线程A,再创建线程B#include#include#include
pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/
pthread_cond_tcond=PTHREAD_COND_INITIALIZER;/*初始化条件变量*/
void*threadA(void*);void*threadB(void*);intcount=0;intmain(void){
pthread_tA; pthread_tB;
pthread_create(&A,NULL,threadA,(void*)NULL);/*创建进程A*/ pthread_create(&B,NULL,threadB,(void*)NULL);/*创建进程B*/ pthread_join(A,NULL);/*等待进程A结束*/ pthread_join(B,NULL);/*等待进程B结束*/ pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); exit(0);}
void*threadA(void*junk){
while
(1) {
pthread_mutex_lock(&mutex);/*锁住互斥量*/ if(count>0){ count-=1;}
pthread_cond_signal(&cond);/*条件改变,发送信号,通知进程*/
pthread_mutex_unlock(&mutex);/*解锁互斥量*/
printf(\
t_b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 期末 复习 参考答案