Linux操作系统-考试题库_第1页
Linux操作系统-考试题库_第2页
Linux操作系统-考试题库_第3页
Linux操作系统-考试题库_第4页
Linux操作系统-考试题库_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1.在Linux目录结构中目录中的文件是普通用户可以使用的可使用的可执行文件的目录是(B)19

A./sbinB./binC./usrD./lib

2.在Linux目录结构中Linux的内核及引导程序所需要的文件位于(B)目录

A/binB./bootC./rootD./proc

3.在Linux目录结构中用来存放系统配置文件(D)目录

A./libB./devC./procD./etc

4.Linux三种特殊权限中仅用于目录文件的权限是(C)22

A.SUIDB.SGIDC.黏滞位D.都可以

5.Linux三种权限中允许进入目录的权限(C)22

A.L可读B.w-可写C.x-可执行D.都不是

6.下列脚本文件最先自动执行的是(A)24

A./etc/rc.localB./etc/profileC.~/.bashrcD.~/.bash_logout

7.下面通配符可匹配多个任意字符的通配符是(A)29

A.*B.?C.[abode]D.[!a-e]

8.输出重定向符号右边的文件已经存在,不会覆盖文件而是追加的定向符是(B)

A.>B.>>C.2>D.&>

9.表示用户家目录的是(B)

A./home(所有用户家目录的父目录,+用户名才是用户家目录)C..D.

10.可删除非空目录及其子目录的命令是(B)

A.touchB.rm-rC.mkdirD.rmdir空目录

11.是强引用的符号(A)

A.单引号B.反引号C.双引号D.中括号

12.可显示隐藏文件的1s命令形式选项是(A)

A.Is-aB.1s-dC.Is-hD.Is-1

13.可通过接受标准输入作为输出内容来创建简单文件的命令是(B)42

A.touchB.catC.viD.gedit

14.不带有编辑功能但有翻页、按行滚动、搜索功能的命令是(B)43

A.catB.more和lessC.head和tailDvi

15.wc命令可统计文件的行数、字数和字节数。在下列格式中只显示文件的字数的是(C)51

A.wcB.wc-cC.wc-wDwc-1

16.可实现文件重命名的命令是(B)52

A.cpB.mvC.InDrename

17.在Linux系统中可通过挂载将光盘、U盘或一个文件系统连接到主目录树的一个目录节点。期中光盘或光盘镜像

对应的文件系统类型是(C)44

A.vfatB.ext3C.iso9660Dvboxsf

18.下面更改文件命令只能更改符号连接的目标文件的权限的命令是(C)

A.chownB.chgrpC.chmodD.以上都不对

19.chmod命令的权限模式可使用字符串形式或八进制形式,当使用八进制形式时模式应由三或四位八进制构成,其

中从最高到最低位依次表示为(A)每个八进制的三个二进制位从高到低分别表示为有无读、写、执行权限

A.文件所有者文件所属组其他用户B.其他用户文件所属组文件所有者

C.文件所属组文件所有者其他用户D.其他用户文件所有者文件所属组

20.chmod命令的权限模式可使用字符串形式或八进制形式,当使用八进制形式时模式应由三或四位八进制构成,其

中每个八进制的三个二进制位从高到低分别表示为有无(A)

A.读写执行B.写读执行C.执行读写D.执行写读

21.运行时不会创建子进程的方式是(C)69

A.赋予shell程序文件可执行权限,直接运行shell程序(外部命令)

B.调用命令解释器解释执行shell程序(Shell函数)

C.使用source命令执行shell程序(内部命令)

D.用()将多条命令括起来而形成的复合命令执行

22.对于使用(C)连接的两条命令,只有当左边的命令执行失败(退出状态为非0值)才会继续执行右边的命令。

A.;B.&&C.||D.都不是

23.Shell执行命令在同名时优先级别最高的是(A)

A.别名B.函数C.内部命令D.外部命令

24.将一个变量stab的值清除(即成为空串)的命令是(D)

A.$stabB.${#stab}C.${stab}Dunsetstab

25.Shell变量不需要预先定义,若对其进行数值操作,可指定变量的属性为整数,具体命令为D

A.declare-a变量名B.declare-f变量名C.typeset-r变量名D.typeset-i变量名

26.Shell中可表示引用数组abrr中的所有非空元素的引用是(B)76

A.${abrr}B.${abrr[*]}C.${#abrr[*]D.${#abrr[@]}

27.在Shell变量引用操作符可实现字符串替换其中(C)用来测试如果变量stra存在且不为空,则返回为word,

否则返回为空串78

A.${stra:-word}B.${stra:=word}C.${stra:+word}D.${stra:?word)

28.在Shell变量引用操作符可实现字符串替换其中(D)用来测试,如果变量stra存在,则返回为变量stra的值,

否则输出为word,并退出当前脚本程序

A.${stra-word}B.${stra=word}C.${stra:+word}D.${stra:?word}

29.在Shell变量引用操作符可实现模式匹配替换其中(B)用来的含义是若pattern匹配变量stra的头部,则删

除最长匹配部分并返回剩余部分。

A.${straftpattern}B.${stra##pattern}C.${stra%pattern}D.${stra厥pattern}

30.为了使子进程能继承父进程中定义的变量,就必须使(D)命令将这些变量送入进程转出区83

A.readB.setC.shiftD.export

31.使用(D)形式时,即使表达式中有Shell的特殊字符时,也不必用双引号将其括起来。87

A.test表达式B.[表达式]C.let算术表达式D.((算术表达式))

32.使用(D)形式时可以返回算术表达式的确切值

A.test表达式B.let算术表达式C.((算术表达式))D.$((算术表达式))

33.gcc可以对编译阶段进行控制,其中(B)选项规定编译到汇编语言,不进行其他操作。107

A._EB._SC._cD.~o

34.gcc可以对编译阶段进行控制,其中(A)选项设定库文件的路径

A.-LpathB.TpathC.TlibraryD.-static

35.gcc可以对编译阶段进行控制,其中(D)选项在可执行文件中包含标准调试信息,供gdb进行调试。

A.-WallB.-WerrorC.-wD.-g

36.在Linux底层文件访问中的大多数操作都是围绕文件描述符来展开的其中(A)函数是内核向进程返回一个文件

描述符为以后使用148

A.open()B.read()C.write()D.close()

37.最终文件权限取决于(D)

A.modeB.unmaskC.mode&unmaskD.mode&~unmask非掩码

38.Lseek()中第三个参数的值为0表示(A)

A.文件开始位置B.文件读写指针当前位置C.文件结束位置D.都不是

39.文件属性读取函数中,依据文件名且当文件是一个符号链接时返回是链接所指向文件的信息的函数是(A)152

A.statB.IstatC.fstatD.都不是

40.利用文件属性读取函数获取的st_mode进行文件类型测试方法正确的是D

A.对成员stmode同文件类型掩码进行与运算B.对成员stmode直接判断

C.利用带成员stjnode参数宏(用于文件类型判断)定义D.A和C都可以

41.下列函数中可关闭文件的函数(A)

A.close()B.dup2()C.A和B都可以D.dup()

42.下列底层文件访问函数中第一个参数是文件描述符的是(C)157

A.chmodB.IchownC.fchownD.chown

43.硬链接是(B)162

A.指向目标文件的指针B.指向文件的索引节点

C.可跨越不同文件系统创建D.可通过symlinkO来创建

44.读取链接readlink和删除链接unlink操作对象是(C)163

A.都只对硬链接有效B.都对软链接无效

B.读取只对软链接有效,删除都两种都有效D.读取对两种都有效,删除只对软链接有效。

45.目录文件的读取函数readdir()参数和返回值的含义()C167

A.参数和返回值都指向目录文件B.参数和返回值都指向目录项

C.参数指向目录文件,返回值指向目录项D.返回值指向目录文件,参数指向目录项

46.对磁盘文件的标准I/O操作一般是实现(A)171

A.全缓冲B.行缓冲C.不带缓冲D.都可以

47.当标准输入和标准输出涉及交互作用设备时,它们是(B)

A.全缓冲B.行缓冲C.不带缓冲D.都可以

48.标准错误输出是(C)

A.全缓冲B.行缓冲C.不带缓冲D.都可以

49.在函数fopen()中文件打开模式中要求文件必须存在的模式是(A)172

A.r和r+B.w和w+C.a和a+D.ab和wb

50.在函数fopen()中文件打开模式中不是可读写的方式打开文件模式是(D)

A.r+B.w+C.a+D.r

51.在打开函数中其中是在由指定的流上打开由路径名指定的文件,其返回值为指向文件流指针,此函数用于将一

个指定的文件打开为一个预定义的标准流(C)

A.openB.fopenC.freopenD.fdopen

52.以下函数中表示从某流中读取一个字符但该函数不带参数,表示从标准输入流中读字符的函数是(C)174

A.getsB.getcC.getcharD.fgec

53.当到达文件尾端或出错时,字符读取函数的返回值都是EOF,为进一步确认文件是否已到文件尾,应当通过(B)

函数来判断。

A.ferrorB.feofC.cleanerrD.perror

54.在定位函数中,可直接将流的读写指针设置到文件的起始位置同时会将错误指示器errn。清零的函数是()

rewind182无答案

A.ferrorB.feofC.clearerr174D.perror

55.下面关于ftell()函数成功调用说法不正确的是(C)

A.会清除流结束标志B.返回读写指针当前相对文件起始位置的位移量

C.返回读写指针当前相对文件结束位置的位移量D.会撤销已调用ungetc()对流的影响

56.格式化输出可把格式化数据输出到标准输出、指定文件及字符缓冲区。其中()函数是将格式化数据输出到指

定大小的字符缓冲区。(D)183

A.printfB.fprintfC.sprintfD.snprintf

57.格式化输入可从标准输入、指定文件及字符缓冲区读取格式化数据。其中()函数是输出到指定文件。(B)

A.printfB.fprintfC.sprintfD.snprintf

58.关于临时文件不正确的是A186

A.可通过tmpnam()创建B.也可通过tmpfile()创建

C.程序结束时或关闭文件时自动删除D.调用tmpname次数有限制

59.下列是进程的异常终止的是(D)193

A.从main中调用return返回B.调用exitC.调用_exitD.调用abort

60.不属于非格式化标准I/O的是(C)

A.字符I/OB.行I/OC.列I/OD.块I/O

61.关于exit()函数不正确的是(B)194

A.先清理后进入内核B.底层系统调用

C.有一个整型参数D.用于正常终止一个进程

62.内核使程序执行的方法的是(A)

A.调用exec函数B.调用exit/_exitC.从main返回D.收到一个系统终止信号

63.关于atexit函数正确的是(D)

A.一个进程可登记超过32个函数B.函数登记的顺序和调用顺序相同

B.同一函数可登记多次,但调用一次

D.在显示或隐式调用exit时则执行这些登记的终止处理程序

64.非初始化数据段由exec赋初值常称为(C)196

A.正文段B.数据段C.bss段D.堆

65.在存储空间布局中从低地址到高地址依次分布为A

A.正文段一数据段-bss段一堆一栈B.栈一堆Tbss段T数据段T正文段

C.正文段T堆T栈一数据段Tbss段D.堆T正文段一数据段一bss段一栈

66.PID为0的交换进程是(A)200

A.其他所有进程的祖先进程B.所有其他用户进程的祖先进程

C.其他所有内核线程的父进程D.普通进程

67.调用exec可能有变化的是(D)204

A.调用前后进程IDB.调用exec前后实际用户ID

C.调用exec前后实际组IDD.调用exec前后有效用户ID和有效组ID

68当waitpid函数的pid参数设置为(A)表示等待任一子进程终止。211

A.pid==-lB.pid==OC.pid>0D.pid<-l

69.fork函数在父进程中的返回值是(B)206

A.0B.创建的子进程的进程标识号C.-lD.1

70.fork函数在子进程中的返回值是(A)

A.0B.创建的子进程的进程标识号C.-lD.1

71.进程可以忽略大部分信号,但下列信号中(D)不能忽略213

A.SIGBORTB.SIGILLC.SIGQUITD.SIGKILL

72.调用exec函数会将原来设置为要捕获的信号都更改为(A)214

A.默认B.忽略C.另一捕获D.默认或忽略

73.可用于在不同主机的进程间通信的技术是(D)225

A.管道B.共享内存C.消息队列D.套接字

74.只能在同源进程间通信的技术(A)224

A.普通管道B.命名管道C.消息队列D.共享内存

75.不属于SystemVIPC通信技术的是(A)

A.管道B.消息队列C.信号量D.共享内存

76.建立从父进程到子进程的管道的方法(B)225

A.父进程关闭管道的写端,子进程关闭管道读端

B.父进程关闭管道的读端,子进程关闭管道的写端

C.父子进程都管道的读端D.父子进程都关闭管道的写端

76.获取某个环境变量值使用函数A

A.getenvB.putenvC.setenvD.unsetenv

77.文件系统保存在磁盘的B

A.引导块B.超级块C.i节点块D.数据块

78.Linux文件系统的根目录的i节点号为C

A.0B.1C.2D.3

79.文件描述符的数据类型是B

A.charB.intC.doubleD.float

80.设置文件偏移量的系统调用是C

A.truncateB.syncC.IseekD.create

81.下面那个不是Iseek第三个参数的取值C

A.SEEK_SETB.SEEK_CURC.SEEK_N0WD.SEEK_END

82.可以使用(C)系统调用获得符号链接所引用文件名称

A.linkB.symlinkC.readlinkD.softlink

83.获得工作路径名称的系统调用是A

A.getcwdB.getpwuidC.getgrgidD.getlogin

84.通过文件属性中的Uid获得文件拥有者名字的系统调用是B

A.getcwdB.getpwuidC.getgrgidD.getlogin

85.通过文件属性中的gid获得文件所属组名字的系统调用是C

A.getcwdB.getpwuidC.getgrgidD.getlogin

86.根据文件路径来改变文件权限使用系统调用是B

A.chownB.chmodC.fchmodD.fchown

一、填空题

1.Linux内核与发行版的关系:LinuxKernel3.5.3是Linux内核版,而Ubuntu12.04.1是Linux的发行版

2.Shell是linux系统的一种命令行用户界面,提供了用户与操作系统进行交互的接口,本质上是命令解释器,可

为用户提供个性化的使用环境。

3.在Shell中测试运算有文件属性测试、字符串测试、数值测试、逻辑运算。

4.专门执行整数算术运算的命令let所指表达式可执行C语言中常见的算术、逻辑、位运算、比较运算等。

5.Vi的三中工作模式:插入模式、命令模式、末行模式。

6.Gcc生成可执行文件的四个步骤:预处理、编译、汇编、链接。预处理是对源程序进行头文件加载和宏展开等操

作,由cpp完成;汇编一是产生汇编代码,二是产生二进制的目标文件,由gcc使用as;生成的多.。文件和使用

到的库文件链接成为可被操作系统执行的可执行程序,使用Id工具,可使用两类库文件。

7.库分为静态库和共享库。静态库由多个.。文件组成的集合,文件成员没有特殊的存在格式,使用“ar”可

维护和管理,库文件后缀为“.a”;共享库多个.o文件由编译器按照一定特殊的方式生成。多个可执行程序可共享

库文件的代码段,但不共享数据。

8.命令行参数是main。函数的参数y

Main函数的参数若有两个参数则第一个参数代表命令行参数个数、第二个参数代表指向各命令行参数字符串的指针

数组。

9.Linux中日期时间的表示方法有:算术类型、结构体类型、字符串类型。

10.如果一个C程序的入口表示为main(intargc,char*argv口),编译该程序后的可执行程序为a.out,那么

在命令"./a.out-ffoo”后,main中的参数argv[l]指向的字符串是CT")。

11.Linux系统下表示标准输入、标准输出和标准错误输出的文件描述符(符号表示)分别为(STDINFILEN0、

STDOUTFILENO、STDERRFILENO),它们的值分别为0、1、2。

12.数字635表示的权限使用字母的方式表示为(rw—wxr-x)、使用符号方式表示为(SIRUSR|SIWUSR|SIWGRP

ISIXGRP|SIROTH|SIX0TH)。

13.系统调用open的功能是打开或创建文件。

14.使用open打开文件时有三个标志必须要选择其一,这三个标志是0RDONLY、0WR0NLY、0RDWR。

15.文件偏移量代表下一次读或写的位置。

16.将文件偏移量市值为当前偏移处之前的4个字节的维护使用Iseek(fd,(―4),(SEEKCUR))。

17.设置打开文件标志(0TRUNC),可以截断文件为。,使用系统调用(truncate)可以截断文件或者加长文件。

18.如果umask设置为022,则创建一个新文件夹(数字表示)的权限为(理省)、创建一个新目录的权限为(遁)。

19.如果umask设置为024,则创建一个新文件夹(数字表示)的权限为(以2)、创建一个新目录的权限为(遢)。

20.使用系统调用(电幽£)可以设置和得到文件模式的屏蔽字。

21.创建硬链接使用系统调用(3虫),创建符号链接使用系统调用(symlink)。

22.获得工作路径名称的系统调用是(getcwd)。

23.可以使用(stat或fstat或Istat)系统调用显示文件属性信息。

24.chmod,chown,utime都可以修改文件i节点信息,其中chmod的功能是(更改文件权限)、chown的功能是(更

改文件所有者和所属组)、utime的功能是(更改文件访问时间和修改时间)。

25.若实现将标准输出重定向到文件描述符为6对应的文件上,则应使用语句(dup2(6,1))。

26.系统调用(Unlink)的作用是删除目录项,这里的目录项是指(文件名和文件i节点的对应关系)。

27.打开目录使用(DIR*opendir(constchar*name))系统调用,关闭目录使用(intclosedir(DIR*dir))

系统调用,读取目录内容使用(structdirent*readdir(DIR*dir))系统调用。

28.chdir系统调用的功能是(改变当前目录)。

29.创建目录使用(intmkdir(constchar"pathname,modetmode))系统调用、删除目录使用(intrmdir(const

char"pathname))系统调用。

30.popen函数实现的操作:创建一个管道,fork一个子进程,然后关闭管道的不使用端,在子进程中exexc一个

shell以执行一条命令,然后等到命令的终止。

31.使用kill发送信号时,发送方进程应具有相应的权限:

接受和发送进程的所有者相同,发送进程的所有者是超级用户

三、简答题

1.系统调用、库函数的区别和练习

从用户角度观察,系统调用和库函数都以C函数形式出现,提供给用户一种功能实现的接口,需要用户输入指

定的参数,调用结束得到指定的返回值。

从实现者角度观察,库函数是在系统调用上层的函数,库函数一般指程序员可以使用的通用函数。

系统调用由两部分组成:

(1)核心函数:是实现系统调用功能的代码,作为操作系统的核心驻留在内存中,是一种共享代码。运行在核心

,0、O

(2)接口函数:是提供给应用程序的API,以库函数的形式存在于Linux的lib.a中,该库中存放了所有系统调用

的接口函数的目标代码,用汇编语言书写。其主要功能是把系统调用号,入口参数地址传给相应的核心函数,并使

用户态下运行的应用程序陷入核心态。

4.完成如下命令

(1)新建用户tom和用户组student

ttuseraddtom

ttpasswdtom

ttgroupaddstudent

(2)新建文件file

fttouchfile

(3)将文件file改名为test,然后将test拷贝到/home

#mvfiletest

#cptest/home

(4)将/home/test文件的拥有着修改为tom,将文件所属组该为student

ftchowntom:student/home/test

5.静态库和共享库的区别

(1)静态库的代码在编译时就已连接到开发人员开发的应用程序中。

(2)共享库只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。

(3)静态库文件以.a结尾,共享库文件以.s。结尾。

6.Linux文件类型主要有哪七类?

常规文件、目录文件、字符设备文件、块设备文件、管道文件、链接文件、套接字文件

7.简述文件、i节点、文件名、目录之间的关系

每个存在磁盘上的文件都由i节点和数据块两部分组成,i节点和文件一一对应,一个i节点可以对应多个文

件名,文件名和i节点的对应关系叫做文件的硬链接,文件名和i节点的对应关系保存在目录文件中。

8.什么是文件描述符?

(1)一个非负整数,内核以此来标识一个特定进程正在操作的文件。

(2)012代表三个标准的文件描述符,分别为标准输入、标准输出、标准错误输出

9.使用符号方式表示rwxrwxrwx权限

SIRUSR|SIWUSR|SIXUSR|SIRGRP|SIWGRP|SIXGRP|SIROTH|SIWOTH|SIXOTH

10.写出open一下6种打开标志:只读、只写、读写、追加、文件不存在创建、截断为0

O_RDONLY0_WR0NLYO_RDWR0_APPENDO_CREAT0_TRUNC

11.读程序,写出执行结果并解释得到该结果的原因

main()

(

intfdl,fd2;

fdl=open("/etc/passwd",O_RDONLY);

fd2=open("/etc/passwd”,0_RDWR);

printf("fdl=%d,fd2=%d\n”,fdl,fd2);

close(fdl);

close(fd2);

)

结果:fdl=3fd2=4

原因:open返回的文件描述符为最小可用的非负整数,012是三个标准的文件描述符默认已经被占用,所以第一个

open的返回值为3,第二个open返回的是4。

12.回答stat、fstat、latat三个系统调用的区别

stat根据路径获得文件元数据信息

fstat根据文件描述符获得文件元数据信息

前两者如果遇到符号链接文件则会一直引用至非符号链接文件

Istat获得符号链接文件本身的文件元数据信息

12.dup和dup2的区别和联系

联系:dup与dup2都用来将新文件描述符指向原来文件描述符指向的打开文件描述。

区别:dup返回的新文件描述符为最小可用的文件描述符,dup2返回的新文件描述符可以通过第二个参数指定。

13.硬链接和符号链接的区别

(1)命令

In原文件硬链接文件(不能对目录创建硬链接)

In-s原文件/目录符号链接文件

(2)是否新增文件:硬链接不增文件,符号链接增加文件。

(3)删除原文件/目录

硬链接:对应i节点链接数T。

符号链接:符号链接文件失效。

(4)删除链接文件

删除硬链接文件,使对应i节点的链接数-1。

删除符号链接文件,对原文件/目录无任何影响

(5)是否跨文件系统:硬链接不可以,符号链接可以

14.fork与vfork区别?

(1)fork创建的子进程复制父进程的整个地址空间,vfork不创建这一副本,子进程借用父进程的地址空间,直

到其调用exec族函数或终止;

(2)fork创建的子进程和父进程相互独立地运行,而vfork创建子进程后挂起父进程,直到子进程终止或调用exec

族函数。

使用kill发送信号时,发送方进程应具有相应的权限:

接受和发送进程的所有者相同,发送进程的所有者是超级用户。

15.阅读以下代码,若execlp调用成功的话,“Done!”会打印输出吗?为什么?

#include<stdio.h>

intmain()

printf("Runningpswithexeclp'n");

execlp(“ps","ps","-af”,0);

printf("Done!\n");

exit(0);

不会输出“Done!”。

原因:

执行execlp(“ps",“ps",“一旺”,0)调用成功后,当前进程的地址空间被新的程序ps所替代,将执行“ps-af”

16.试写出下列程序段的运行结果,并解释原因

intx=0,inty=0;

voidthreadl(void)

printf("Thisispthreadl.thesentencel\n");

y=7;

sleep(1);

printf("Thisispthreadl.thesentence2\n");

x=x+y;

)

voidthread2(void)

(

printf("Thisispthreadl.thesentencel\n");

x=4;

sleep(1);

printf("Thisispthreadl.thesentencel\n");

y=8+y;

voidmain(void)

pthreadtidl,id2;

pthreadcreate(&idl,NULL,(void*)threadl,NULL);

pthread_create(&id2,NULL,(void*)thread2,NULL);

pthread_join(idl,NULL);

pthread_join(id2,NULL);

printf(“x=%d,y=%d\n»,x,y);

)

答案:

Thisispthreadl.thesentense1

Thisispthread2.thesentense1

Thisispthreadl.thesentense2

Thisispthread2.thesentense2

x=ll,y=15

原因:

(1)线程1先运行,线程2后运行。

线程1执行sleep(l);后阻塞,线程2继续执行,线程2执行到sleep(1);时线程2阻塞,线程1阻塞结束继续执

行,线程1执行结束后线程继续执行到结束。

(2)线程1和线程2共享进程的数据段,因此共享变量x,y。

17.进程间通信的六种方式是什么?简述他们的通信原理?

(1)信号:用于通知接收进程有某种事件发生。

(2)管道:连接一个进程的输出至另一个进程的输入的一种方法。

(3)信号量:一个计数器,用来记录对某个资源的使用情况。

(4)共享内存:允许多个进程访问同一块内存空间。

(5)消息队列:消息的链表,链表中每个节点包括消息类型和正文两部分。

(6)套接字:在网络上主机间进程进行通信的方式。

18.PIPE与FIFO的区别与联系

PIPE为未命名管道,FIFO为命名管道。

联系:PIPE和FIFO都是单向传输,一端为读,另一端为写。

区别:PIPE只能在有亲缘关系的进程中使用,如父子进程;

FIFO有名字,所以只要知道该名字,无关进程之间也可以使用。

19.书名产生信号的几种方式?

(1)用户操作。如键盘操作Ctrl-C,最终使得内核产生信号SIGINT。

(2)进程执行出错。如浮点数溢出,内核也会产生信号。

(3)进程执行某个系统调用。如调用kill向某个进程或进程组发送信号。

20.说明信号传递的过程。

(1)生成(generating)。内核要更新目标进程的数据结构,表示一个新的信号已经被发送给此进程。此时,进程

并没有对信号做出任何响应。

(2)传递(delivery)。强迫目标进程对信号做出响应。

四、编程题

1.向文件fl中写入“hell。world!”,然后再将fl中的内容读出并显示在屏幕上。(注意必要的错误判断)

Winclude<unistd.h>

ttinclude<sys/stat.h>

Winclude<sys/fcntl.h>

intmain()

intfd;

charbuf1[13]={z'helloworld!”};

charbuf2[12];

intnum;

fd=open(〃fl〃,O_RDWR|O_CREAT|O_TRUNC,0644);

if(fd==-l)

(

perror(zzf1notopen");

exit(1);

}

num=write(fd,buf1,sizeof(buf1)-1);

if(num!=(sizeof(bufl)-l))

printf(z,writelessthanwant\n〃);

lseek(fd,0,SEEK_SET);

num=read(fd,buf2,12);

if(num!=12)

printf("readlessthan12\n〃);

write(1,buf2,12);

close(fd);

)

2.向文件f2中写入“aabbccddee”,然后将偏移量移到绝对值偏移为4的位置处,读6个字符,并将结果显示在

屏幕上

ftinclude<unistd.h>

ttinclude<sys/stat.h>

^include<sys/fcntl.h>

intmain()

(

intfd;

charbuf1[ll]={〃aabbccddee〃};

charbuf2[10];

intnum;

fd=open(〃f2〃,0_RDWR|O_CREAT|0_TRUNC,0644);

if(fd=~l)

(

perror(z/f2notopen");

exit(1);

)

num=write(fd,buf1,sizeof(buf1)-1);

if(num!=(sizeof(buf1)-1))

printf(zzwritelessthanwant\n,z);

lseek(fd,4,SEEK_SET);

num=read(fd,buf2,6);

if(num!=6)

printf(/zreadlessthan6\n〃);

write(1,buf2,6);

close(fd);

}

3.向文件f3中写入“aabbccddeeffgghh”,然后将文件截短后的文件内容读出并显示在屏幕上

ftinclude<unistd.h>

ftinclude<sys/stat.h>

ftinclude<sys/fcntl.h>

intmain()

{

intfd;

charbuf1[17]={zzaabbccddeeffgghhzz};

charbuf2[8];

intnum;

fd=open(〃f3〃,0_RDWR|O_CREAT|O_TRUNC,0644);

if(fd==-l)

(

perror(zzf3notopen");

exit(1);

)

num=write(fd,buf1,sizeof(buf1)-1);

if(num!=(sizeof(buf1)-1))

printf(z,writelessthanwant\n〃);

lseek(fd,0,SEEK_SET);

ftruncate(fd,8);

num=read(fd,buf2,8);

if(num!=8)

printf(z/readlessthan8\n〃);

write(1,buf2,8);

close(fd);

}

4.实现“cat文件名”显示文件内容

#include<fcntl.h>

main(intargc,char*argv[])

{

intfd;

intnum;

charbuf[10];

if(argc!=2)

{

printf(zzmissfilename\n/z);

exit(1);

}

fd=open(argv[l],0_RD0NLY);

if(fd==-l)

{

perror(/zerroropen");

exit(1);

)

while((num=read(fd,buf,10))!=0)

write(1,buf,num);

close(fd);

5.实现“cp原文件目标文件”

ftinclude<sys/stat.h>

ftinclude<fcntl.h>

main(intargc,char*argv[])

(

intfrom,to;

intnum;

charbuf[10];

if(argc!=3)

{

printf(/zargumenterror\n,z);

exit(1);

)

from=open(argv[1],0_RD0NLY);

to=open(argv[2],0_WR0NLY10_CREAT10_TRUNC,0644);

num=read(from,buf,10);

while(num!=0)

(

write(to,buf,num);

num=read(from,buf,10);

}

close(from);

close(to);

6.编写程序pro3.c,将字符串“helloworld"通过输出重定向方式写入文件fl中

#include<stdio.h>

#include<unistd.h>

ftinclude<fcntl.h>

#include<sys/stat.h>

ftinclude<sys/types.h>

main()

intfd;

if((fd=open("fl",0_WR0NLY10_CREAT,0644))=-l)

perror(zzopenfail");

if(dup2(fd,1)=-1)

perror(Z/Redirectfailed");

printf(z,Helloworld\n/z);

close(fd);

7.使用fork创建进程,在子进程中打印"Iamthechild”和子进程pid,在父进程中打印"Iamthefather”

和父进程pid

^include<sys/types.h>

ftinclude<stdlib.h>

#include<stdio.h>

intmain()

pid_tpid;

pid=fork();

if(pid<0)

(

perror(zzforkzz);

exit(1);

)

elseif(pid==0)

printf(,ZIamthechild\n〃);

else

printf(/ZIamthefather\nz,);

exit(0);

}

8.创建子进程,在子进程中执行“ps-A”命令,父进程等待子进程结束后打印“childover"

及所处理的子进程进程号

ftinclude<sys/types.h>

#include<stdlib.h>

main()

(

pidtpid,cpid;

inti;

char*args[64];

args[0]=,,ps”;

args[l]="-A”;

args[2]=NULL;

pid=fork();

if(pid<0)

(

perror(“fork");

exit(1);

)

elseif(pid==0)

{

execvp(args[0],args);

exit(0);

)

else

(

cpid=wait(NULL);

printf("childover!cpid=%d\n”,cpid);

)

9.编写程序处理SIGINT信号,当程序接收到SIGINT信号后输出"SIGINTiscaught"

ftinclude<stdio.h>

#include<signal.h>

voidsignal_handler(intsignum)

switch(signum)

caseSIGINT:

printf(,ZSIGINTiscaught!\n,z);

break;

)

)

intmain()

(

signal(SIGINT,signalhandler);

pause();

return0;

)

10.使用PIPE时限父子进程向子进程发送1234567890,子进程接收并显示

#include<sys/types.h>

ftinclude<stdio.h>

main()

(

intpfd[2];

charbuf[32];

pidtpid;

pipe(pfd);

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

perror("fork");

elseif(pid>0)

(

close(pfd[0]);

write(pfd[l],/z1234567890,z,11);

)

else

{

close(pfd[l]);

read(pfd[0],buf,11);

printf(,zchildread:%s\n〃,buf);

一、单项选择题

1、Linux操作系统内核创始人是(C)

A.BillGatesB.RichardStallman

C.LinusTorvaldsD.DennisM.Ritchie

2、以下哪种不是Linux的Shell类型(C)

A.bashB.kshC.rshD.csh

3、下面关于Shell的说法,不正确的是(B)。

A、一种命令语言解释器B、一种和C类似的程序语言

C、操作系统的外壳D、用户与Linux内核之间的接口程序

4、hda3表示(B)。

A、IDEO接口上的从盘B、IDEO接口上主盘的第三个分区

C、IDEO接口上的第三个主分区D、IDEO接口上的第三个逻辑分区

5、一般情况下,Swap的大小建议是(C)。

A、50MB、100MC、内存大小的2倍D、150M

6、Linux下的cd命令可以改变用户的当前目录,当用户键入cd并按回车后,(A)。

A、当前目录改为用户主目录B、当前目录改为根目录

C、当前目录没有变D、当前用户改

温馨提示

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

评论

0/150

提交评论