Linux期末复习有参考答案.docx

上传人:b****0 文档编号:9752185 上传时间:2023-05-21 格式:DOCX 页数:13 大小:18.16KB
下载 相关 举报
Linux期末复习有参考答案.docx_第1页
第1页 / 共13页
Linux期末复习有参考答案.docx_第2页
第2页 / 共13页
Linux期末复习有参考答案.docx_第3页
第3页 / 共13页
Linux期末复习有参考答案.docx_第4页
第4页 / 共13页
Linux期末复习有参考答案.docx_第5页
第5页 / 共13页
Linux期末复习有参考答案.docx_第6页
第6页 / 共13页
Linux期末复习有参考答案.docx_第7页
第7页 / 共13页
Linux期末复习有参考答案.docx_第8页
第8页 / 共13页
Linux期末复习有参考答案.docx_第9页
第9页 / 共13页
Linux期末复习有参考答案.docx_第10页
第10页 / 共13页
Linux期末复习有参考答案.docx_第11页
第11页 / 共13页
Linux期末复习有参考答案.docx_第12页
第12页 / 共13页
Linux期末复习有参考答案.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Linux期末复习有参考答案.docx

《Linux期末复习有参考答案.docx》由会员分享,可在线阅读,更多相关《Linux期末复习有参考答案.docx(13页珍藏版)》请在冰点文库上搜索。

Linux期末复习有参考答案.docx

Linux期末复习有参考答案

Linux期末复习

1.UNIX/Linux系统中条件变量需要和什么机制配合

互斥锁。

2.Linux多线程编程中,触发pthread_cond_wait返回的条件

pthread_cond_signal()或pthread_cond_broadcast()唤醒,并且互斥锁在解锁状态。

3.不同进程共享相同文件表项的情况

不同进程共享同一个文件表项(父子进程)

4.进程从main()函数开始执行,它的异常结束方式

|

1.调用abort,产生SIGABRT信号

2.接收到终止信号

5.在UNIX/Linux命令中实现标准输入重定向

command

6.文件要取消该文件的文件所有者的执行权限,同时增加该文件的同组用户的写权限,可以使用的命令

chmodu-xfile;chmodg+wfile

Linux系统中的标准错误的文件描述符值

标准输入(standardinput)的文件描述符是0,标准输出(standardoutput)是1,标准错误(standarderror)是2

#

8.调用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)时,该用户所拥有的权限等同于文件“/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);/*条件改变,发送信号,通知t_b进程*/

pthread_mutex_unlock(&mutex);/*解锁互斥量*/

printf("%d\n",count);

}

}

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(argc<2){

!

printf("Usage:

%scommand\n",argv[0]);

return0;

}

pid_tpid;

intstatus;

if((pid=fork())<0){

-

printf("forkerror\n");

return0;

}

if(pid=0){

execl("/bin/sh","sh","-c",argv[1],(char*)0);

exit(0);

}else{

waitpid(pid,&status,0);

}

return0;

}

23.在Linux系统下利用C语言编程,实现一个程序,该程序可以实现ls-l命令的功能。

(要求给出C语言代码或者给出关键代码并通过流程图及描述代码结构)。

#include""

#include""

#include""

#include""

#include""

voidprint_error(char*errmsg)

{

printf("ERROR:

%s\n",errmsg);

exit(0);

?

}

char*getformattime(time_tt)

{

staticcharformattime[20];

structtm*lt;

lt=localtime(&t);

chartmptime[24];

memset(tmptime,0,sizeof(tmptime));

strftime(tmptime,24,"%Y-%m-%d%H:

%M:

%S",lt);

strcpy(formattime,tmptime);

returnformattime;

}

char*getuserinfo(uid_tmy_uid)

{

"

charusername[100];

chargroupname[100];

staticcharuserinfo[200];

structpasswd*my_info;

structgroup*grp;

my_info=getpwuid(my_uid);

strcpy(username,my_info->pw_name);

grp=getgrgid(my_info->pw_gid);

if(!

grp){

strcpy(groupname,"-");

}else{

strcpy(groupname,grp->gr_name);

\

}

strcat(username,"\t");

strcat(username,groupname);

strcpy(userinfo,username);

returnuserinfo;

}

|

char*getinfo(char*path)

{

staticcharstr[1000];

structstatinfo;

stat(path,&info);

strcpy(str,"----------");

/

if(S_ISDIR){

str[0]='d';

}elseif(S_ISCHR){

str[0]='c';

}elseif(S_ISBLK){

str[0]='b';

}else{

str[0]='-';

}

if&S_IRUSR){

str[1]='r';

}

if&S_IWUSR){

str[2]='w';

}

if&S_IXUSR){

str[3]='x';

}

if&S_IRGRP){

str[4]='r';

|

}

if&S_IWGRP){

str[5]='w';

}

if&S_IXGRP){

str[6]='x';

!

}

if&S_IROTH){

str[7]='r';

}

if&S_IWOTH){

str[8]='w';

}

}

if&S_IXOTH){

str[9]='x';

}

chartmp[20];

~

strcat(str,"");

sprintf(tmp,"%ld",;

strcat(str,tmp);

strcat(str,"");

strcat(str,getuserinfo);

strcat(str,"");

sprintf(tmp,"%20ld",;

strcat(str,tmp);

strcat(str,"");

strcat(str,getformattime);

returnstr;

}

intmain(intargc,char*argv[])

{

DIR*dp;

structdirent*dirp;

intmax_dir_length=sysconf(_PC_PATH_MAX);

chardir[max_dir_length];

if(argc!

=2){

charbuf[max_dir_length];

if(getcwd(buf,max_dir_length)){

strcpy(dir,buf);

}else{

print_error("Diristoolongorsomethingerror!

");

}

}else{

strcpy(dir,argv[1]);

}

if((dp=opendir(dir))==NULL){

print_error("Readdirfailed!

");

}

chartmp_dir[max_dir_length];

while((dirp=readdir(dp))!

=NULL){

if(strcmp(dirp->d_name,"..")&&strcmp(dirp->d_name,".")){

strcpy(tmp_dir,dir);

strcat(tmp_dir,"/");

printf("%s%s\n",getinfo(strcat(tmp_dir,dirp->d_name)),dirp->d_name);

}

}

closedir(dp);

exit(0);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2