习题答案全linux_第1页
习题答案全linux_第2页
习题答案全linux_第3页
习题答案全linux_第4页
习题答案全linux_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、节点块 D. 数据块 i 节点号为 CA.SEEK_SET B.SEEK_CUR 8 Sync 系统调用的功能是 AA. 刷新所有缓存到磁盘盘C.刷新缓存中某个文件的数据到磁盘盘9 Fsync 系统调用的功能是 BA. 刷新所有缓存到磁盘盘C.刷新缓存中某个文件的数据到磁盘 盘10 Fdata 系统调用的功能是 CA. 刷新所有缓存到磁盘盘C.刷新缓存中某个文件的数据到磁盘 盘、选择题1下列那个命令不是显示多个环境变量的CA set B export C pwd D env2获取某个环境变量值使用函数AA getenv B putenv C setenv D unsetenv 3文件系统保存在

2、磁盘的 BA. 引导块 B. 超级块 C.i 4 Linux 文件系统的根目录的A. 0 B. 1 C.2 D.35文件描述符的数据类型是BA. char B.int C.double D.float 6设置文件偏移量的系统调用是CA. truncate B. syncC . lseekD.create7下面那个不是 lseek 第三个参数的取值 CC.SEEK_NOW D.SEEK_ENDB.刷新缓存中某个文件的所有信息到磁D. 刷新磁盘中某个文件的属性信息到磁B.刷新缓存中某个文件的所有信息到磁D. 刷新磁盘中某个文件的属性信息到磁B.刷新缓存中某个文件的所有信息到磁D. 刷新磁盘中某个文

3、件的属性信息到磁11 可以使用(C)系统调用获得符号链接所引用文件名称A.link B.symlinkC.readlinkD.softlink12获得工作路径名称的系统调用是AA.getcwdB.getpwuidC.getgrgidD.getlogin13通过文件属性中的uid 获得文件拥有者名字的系统调用是 BA.getcwdB.getpwuidC.getgrgidD.getlogin14通过文件属性中的gid 获得文件所属组名字的系统调用是 CA.getcwdB.getpwuidC.getgrgidD.getlogin15根据文件路径来改变文件权限使用系统调用是BA.chown B.chm

4、odC.fchmodD.fchown二、填空题1关于 Linux 的版本有两种不同的称呼:一种是内核版本,一种是发行版本。2 Vi 的三中工作模式:插入模式、命令模式、末行模式。3Gcc 生成可执行文件的四个步骤:预处理、编译、汇编、链接。4 Makefile用来描述程序或工程中各个文件之间的相互联系5. makeo命令用来及时 makefile 文件中的命令6库分为 静态库 和共享库 。7. 命令行参数是 mai n。函数的参数8. Main 函数的参数若有两个参数则第一个参数代表命令行参数个数、第二个参数代表指向 各命令行参数字符串的指针数组。9. Linux 中日期时间的表示方法有:算术

5、类型、结构体类型、字符串类型。10. 使用 time 函数获得的时间是算术类型、 代表自 1970年1月 1日零时到当前时间的秒数。11. 把算数类型时间表示转换成结构体类型使用()函数localtime 。12. 把算数类型时间表示转换成字符串类型使用()函数ctime 。13. Maketime 函数把()类型时间表示转换成()类型时间表示结构体、算术。14. 如果一个C程序的入口表示为 ma in (int argc , char *argv),编译该程序后的可执行程序为a.out,那么在命令./a.out - f foo ”后,ma in中的参数argv1指向的字符 串是(“-f ”)

6、。15. Linux 系统下表示标准输入、标准输出和标准错误输出的文件描述符(符号表示)分别为(STDIN_FILENO STDOUT_FILENO STDERR_FILEN)它们的值分另U为 0、1、2。16. 数字 635 表示的权限使用字母的方式表示为( rwwxr-x )、使用符号方式表示为 (S_IRUSR | S_IWUSR | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH )。17. 系统调用 open 的功能是打开或创建文件。18. 使用 open 打开文件时有三个标志必须要选择其一, 这三个标志是 O_RDONL、YO_WRON、LYO_RDWR

7、19. 文件偏移量代表下一次读或写的位置。20. 将文件偏移量市值为当前偏移处之前的4 个字节的维护使用 lseek ( fd ,( 4), (SEEK_CU)R)。21. 设置打开文件标志(O_TRUN)可以截断文件为 0,使用系统调用(truncate )可以截 断文件或者加长文件。22. 如果umask设置为022,则创建一个新文件夹(数字表示)的权限为(644)、创建一个 新目录的权限为( 755)。23. 如果umask设置为024,则创建一个新文件夹(数字表示)的权限为(642)、创建一个 新目录的权限为( 753)。24. 使用系统调用(umask)可以设置和得到文件模式的屏蔽字

8、。25. 创建硬链接使用系统调用(link ),创建符号链接使用系统调用( symlink )。26获得工作路径名称的系统调用是(getcwd )。27可以使用( stat 或 fstat 或 lstat )系统调用显示文件属性信息。28. chmod, chown, utime都可以修改文件i节点信息,其中 chmod的功能是(更改文件权 限)、 chown 的功能是(更改文件所有者和所属组) 、utime 的功能是(更改文件访问时间和 修改时间)。29. 若实现将标准输出重定向到文件描述符为6对应的文件上, 则应使用语句 ( dup2(6,1) )。30. 系统调用( Unlink )的作

9、用是删除目录项,这里的目录项是指(文件名和文件 i 节点的 对应关系)。31. 打开目录使用( DIR *opendir(const char *name) )系统调用,关闭目录使用( int closedir(DIR *dir) )系统调用,读取目录内容使用( struct dirent *readdir(DIR *dir) ) 系统调用。32. chdir 系统调用的功能是(改变当前目录) 。33. 创建目录使用( int mkdir(const char *pathname, mode_t mode) )系统调用、删除目 录使用( int rmdir(const char *pathna

10、me) )系统调用。三、简答题1. 关于 Linux 的版本有两种不同的称呼:一种是内核版本,一种是发行版本。2. 简述 Linux 操作系统的特点3. 系统调用、库函数的区别和练习从用户角度观察, 系统调用和库函数都以 C 函数形式出现, 提供给用户一种功能实现的 接口,需要用户输入指定的参数,调用结束得到指定的返回值。从实现者角度观察, 库函数是在系统调用上层的函数, 库函数一般指程序员可以使用的通用 函数。系统调用由两部分组成:(1)核心函数:是实现系统调用功能的代码,作为操作系统的核心驻留在内存中,是一种共享代码。运行在核心态。(2) 接口函数:是提供给应用程序的API,以库函数的形式

11、存在于 Linux的lib.a 中,该 库中存放了所有系统调用的接口函数的目标代码, 用汇编语言书写。 其主要功能是把系统调 用号,入口参数地址传给相应的核心函数,并使用户态下运行的应用程序陷入核心态。4. 完成如下命令( 1)新建用户 tom 和用户组 student#useradd tom#passwd tom#groupadd student( 2)新建文件 file#touch file( 3)将文件 file 改名为 test ,然后将 test 拷贝到 /home#mv file test #cp test /home( 4)将 /home/test 文件的拥有着修改为 tom ,

12、将文件所属组该为 student #chown tom:student /home/test5静态库和共享库的区别(1)静态库的代码在编译时就已连接到开发人员开发的应用程序中。(2)共享库只是在程序开始运行时才载入, 在编译时, 只是简单地指定需要使用的库函数。( 3)静态库文件以 .a 结尾,共享库文件以 .so 结尾。6 Makefile 文件的显式规则是什么? 目标文件:依赖文件列表 更新目标文件使用的命令7 Linux 文件类型主要有哪七类? 常规文件、目录文件、字符设备文件、块设备文件、管道文件、链接文件、套接字文件8简述文件、 i 节点、文件名、目录之间的关系每个存在磁盘上的文件都

13、由 i 节点和数据块两部分组成, i 节点和文件一一对应,一个i 节点可以对应多个文件名,文件名和 i 节点的对应关系叫做文件的硬链接,文件名和 i 节 点的对应关系保存在目录文件中。9什么是文件描述符?(1)一个非负整数,内核以此来标识一个特定进程正在操作的文件。(2)012 代表三个标准的文件描述符,分别为标准输入、标准输出、标准错误输出10使用符号方式表示 rwxrwxrwx 权限S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH| S_IWOTH|S_IXOTH11写出 open 一下 6 种打开标志:只读、只写、读写、追加、

14、文件不存在创建、截断为 0 O_RDONLY O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC12读程序,写出执行结果并解释得到该结果的原因main()int fd1,fd2;fd1=open( “ /etc/passwd ” ,O_RDONLY);fd2=open( “ /etc/passwd ” ,O_RDWR);printf( “fd1=%d,fd2=%dn ” ,fd1,fd2);close(fd1);close(fd2);结果: fd1=3 fd2=4原因:open返回的文件描述符为最小可用的非负整数,012是三个标准的文件描述符默认已经被占用,所以第

15、一个 open的返回值为3,第二个open返回的是4。13回答 stat 、 fstat 、 latat 三个系统调用的区别stat 根据路径获得文件元数据信息fstat 根据文件描述符获得文件元数据信息 前两者如果遇到符号链接文件则会一直引用至非符号链接文件 lstat 获得符号链接文件本身的文件元数据信息 14 dup 和 dup2 的区别和联系联系: dup 与 dup2 都用来将新文件描述符指向原来文件描述符指向的打开文件描述。区别: dup 返回的新文件描述符为最小可用的文件描述符, dup2 返回的新文件描述符可以通 过第二个参数指定。15硬链接和符号链接的区别(1 )命令 ln

16、原文件硬链接文件(不能对目录创建硬链接)In - s原文件/目录符号链接文件(2)是否新增文件:硬链接不增文件,符号链接增加文件。(3)删除原文件 /目录 硬链接:对应 i 节点链接数 -1 。符号链接:符号链接文件失效。(4)删除链接文件 删除硬链接文件,使对应 i 节点的链接数 -1 。 删除符号链接文件,对原文件 /目录无任何影响(5)是否跨文件系统:硬链接不可以,符号链接可以16 fork 与 vfork 区别?(1)fork 创建的子进程复制父进程的整个地址空间, vfork 不创建这一副本,子进程借用 父进程的地址空间,直到其调用 exec 族函数或终止;(2)fork 创建的子进

17、程和父进程相互独立地运行,而 vfork 创建子进程后挂起父进程,直 到子进程终止或调用 exec 族函数。17阅读以下代码,若 execlp调用成功的话,“Done!”会打印输出吗?为什么? #incIudeint main()1printf(“ Running ps with execlpn”execlp(“ps” , ” ps” , ” -af ” ,0);printf(“ Done!n ” );exit(0);不会输出“ Done! ”。原因:执行 execlp( “ps”,”ps”,” - af ”,0) 调用成功后,当前进程的地址空间被新的程序ps所替代,将执行“ ps -af ”

18、18试写出下列程序段的运行结果,并解释原因int x=0,int y=0;void thread1(void)printf( “This is pthread1.the sentence 1n” );y=7;sleep(1);printf( “This is pthread1.the sentence 2n” );x=x+y;void thread2(void)printf( “This is pthread1.the sentence 1n” );x=4;sleep(1);printf( “This is pthread1.the sentence 1n” );y=8+y;void main

19、(void)pthread_t id1,id2; pthread_create(&id1,NULL,(void *)thread1,NULL); pthread_ create(&id2,NULL,(void *)thread2,NULL); pthread_join(id1,NULL);pthread_ join(id2,NULL);printf( “ x=%d,y=%dn”,x,y);答案:This is pthread1.the sentense 1This is pthread2.the sentense 1This is pthread1.the sentense 2This is

20、pthread2.the sentense 2 x=11, y=15 原因:( 1)线程 1 先运行,线程 2 后运行。线程 1 执行 sleep(1); 后阻塞,线程 2 继续执行,线程 2 执行到 sleep(1); 时线程 2 阻塞, 线程 1 阻塞结束继续执行,线程 1 执行结束后线程继续执行到结束。(2)线程 1 和线程 2 共享进程的数据段,因此共享变量x,y。19进程间通信的六种方式是什么?简述他们的通信原理?(1)信号:用于通知接收进程有某种事件发生。 (2)管道:连接一个进程的输出至另一个进程的输入的一种方法。(3)信号量:一个计数器,用来记录对某个资源的使用情况。(4)共享

21、内存:允许多个进程访问同一块内存空间。(5)消息队列:消息的链表,链表中每个节点包括消息类型和正文两部分。(6)套接字:在网络上主机间进程进行通信的方式。20. PIPE与FIFO的区别与联系PIPE 为未命名管道, FIFO 为命名管道。联系:PIPE和FIFO都是单向传输,一端为读,另一端为写。区别:PIPE只能在有亲缘关系的进程中使用,如父子进程; FIFO有名字,所以只要知道该名字,无关进程之间也可以使用。21. 书名产生信号的几种方式?(1) 用户操作。如键盘操作 Ctrl-C ,最终使得内核产生信号SIGINT。(2)进程执行出错。如浮点数溢出,内核也会产生信号。(3) 进程执行某

22、个系统调用。如调用kill 向某个进程或进程组发送信号。22. 说明信号传递的过程。(1)生成( generating )。内核要更新目标进程的数据结构,表示一个新的信号已经被发送 给此进程。此时,进程并没有对信号做出任何响应。(2)传递( delivery )。强迫目标进程对信号做出响应。套接字类型 (字节流套接字、数据报套接字、原是套接字)面向连接套接字通信过程图示 P242无连接套接字通信过程图示 P243/ 、/、- -、 *注意三、编程题1.向文件 f1 中写入“ hello world !”,然后再将 f1 中的内容读出并显示在屏幕上。 必要的错误判断)#include #incl

23、ude #include int main()int fd;char buf113=hello world!;char buf212;int num;fd = open( f1,O_RDWR| O_CREAT | O_TRUNC, 0644); if(fd=-1)perror(f1 not open);exit(1); num=write(fd,buf1,sizeof(buf1)-1);if(num!=(sizeof(buf1)-1) printf(write less than wantn);lseek(fd,0,SEEK_SET); num=read(fd,buf2,12);if(num!

24、=12)printf(read less than 12n); write(1,buf2,12);close(fd);2向文件 f2 中写入“ aabbccddee ”,然后将偏移量移到绝对值偏移为 4 的位置处,读 6 个 字符,并将结果显示在屏幕上#include #include #include int main()int fd;char buf111=aabbccddee;char buf210;int num;fd = open( f2,O_RDWR| O_CREAT | O_TRUNC, 0644); if(fd=-1)perror(f2 not open);exit(1); n

25、um=write(fd,buf1,sizeof(buf1)-1);if(num!=(sizeof(buf1)-1)printf(write less than wantn); lseek(fd,4,SEEK_SET); num=read(fd,buf2,6);if(num!=6)printf(read less than 6n);write(1,buf2,6); close(fd);3向文件 f3 中写入“ aabbccddeeffgghh ”,然后将文件截短后的文件内容读出并显示在屏 幕上#include #include #include int main()int fd;char buf

26、117=aabbccddeeffgghh;char buf28;int num;fd = open( f3,O_RDWR| O_CREAT | O_TRUNC, 0644); if(fd=-1)perror(f3 not open);exit(1); num=write(fd,buf1,sizeof(buf1)-1);if(num!=(sizeof(buf1)-1) printf(write less than wantn);lseek(fd,0,SEEK_SET); ftruncate(fd,8);num=read(fd,buf2,8);if(num!=8)printf(read less

27、than 8n);write(1,buf2,8);close(fd);4在程序中将 umask 改至 044,创建文件 f4#include #include #include int main()int fd; umask(044);creat(f4,S_IRUSR|S_IWUSR);5实现“ cat 文件名”显示文件内容#include main(int argc,char *argv)int fd;int num;char buf10;if(argc!=2) printf(miss filenamen); exit(1);fd=open(argv1,O_RDONLY);if(fd=-1)

28、 perror(error open); exit(1); while(num=read(fd,buf,10)!=0) write(1,buf,num);close(fd);6实现“ cp 原文件 目标文件”#include #include main(int argc,char *argv)int from,to;int num;char buf10;if(argc!=3) printf(argument errorn); exit(1); from=open(argv1,O_RDONLY); to=open(argv2,O_WRONLY|O_CREAT|O_TRUNC,0644);num=

29、read(from,buf,10); while(num!=0) write(to,buf,num); num=read(from,buf,10);close(from); close(to);f1 中在父进程中打child over1编写程序 pro3.c ,将字符串“ hello world ”通过输出重定向方式写入文件 #include #include #include #include #include main()int fd; if(fd=open(f1,O_WRONLY|O_CREAT,0644)=-1) perror(open fail);if(dup2(fd,1)=-1) perror(Redirect failed); printf(Hello worldn);close(fd);第六章 编程题 略。1使用 fork 创建进程,在子进程中打印“ I am the child ”和子进程 pid , 印“ I am the father”和父进程 pid#inc

温馨提示

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

评论

0/150

提交评论