




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 .在 Linux 目录结构中目录中的文件是普通用户可以使用的可使用的可执行文件的目录是(B)19A./sbinB./binC./usrD./lib2 .在 Linux 目录结构中 Linux 的内核及引导程序所需要的文件位于(B)目录A/binB./bootC./rootD./proc3 .在 Linux 目录结构中用来存放系统配置文件(D)目录A./libB./devC./procD./etc4 .Linux 三种特殊权限中仅用于目录文件的权限是(C)22A.SUIDB.SGIDC.黏滞位 D.都可以5 .Linux 三种权限中允许进入目录的权限(C)22A.r-可读 B.w-可写 C.
2、x-可执行 D.都不是6 .下列脚本文件最先自动执行的是(A)249.表布用户家目录的是(B)16 .可实现文件重命名的命令是(B)52A.cpB.mvC.lnDrenameA./etc/rc.local7.下面通配符可匹配多个任意字符的通配符是B./etc/profile(A)29C./.bashrcD./.bash_logoutA.*B.?C.abcde8.输出重定向符号右边的文件已经存在,不会覆盖文件而是追加的定向符是(D.!a-eB)A.B.C.2D.&A./home(所有用户家目录的父目录,+用户名才是用户家目录)10.可删除非空目录及其子目录的命令是(B)B.C.D.A.t
3、ouch11.是强引用的符号(A)B.rm-rC.mkdirD.rmdir 空目录A.单引号B.反引号C.双引号D.中括号12.可显示隐藏文件的 ls 命令形式选项是(A)A.ls-aB.ls-d13.可通过接受标准输入作为输出内容来创建简单文件的命令是C.ls-hD.ls-lB)42A.touchB.catC.viD.gedit14.不带有编辑功能但有翻页、按行滚动、搜索功能的命令是(B)43A.catB.more 和 lessC.head 和 tailDvi15.wc 命令可统计文件的行数、字数和字节数。在下列格式中只显示文件的字数的是(C)51A.wcB.wc-cC.wc-wDwc-l1
4、7 .在 Linux 系统中可通过挂载将光盘、U 盘或一个文件系统连接到主目录树的一个目录节点。期中光盘或光盘镜像对应的文件系统类型是(C)44A.vfatB.ext3C.iso9660Dvboxsf18 .下面更改文件命令只能更改符号连接的目标文件的权限的命令是(C)A.chownB.chgrpC.chmodD.以上都不对19 .chmod 命令的权限模式可使用字符串形式或八进制形式,当使用八进制形式时模式应由三或四位八进制构成,其中从最高到最低位依次表示为(A)每个八进制的三个二进制位从高到低分别表示为有无读、写、执行权限21.运行时不会创建子进程的方式是(C)69B.调用命令解释器解释执
5、行 shell 程序(Shell 函数)C.使用 source 命令执行 shell 程序(内部命令)D.用()将多条命令括起来而形成的复合命令执行22.对于使用(C)连接的两条命令,只有当左边的命令执行失败(退出状态为非 0 值)才会继续执行右边的命令。A.;B.&23.Shell 执行命令在同名时优先级别最高的是(A)A.别名 B.函数24.将一个变量 stab 的值清除(即成为空串)的命令是(A.$stabB.$#stab25.Shell 变量不需要预先定义,若对其进行数值操作,可指定变量的属性为整数,具体命令为A.declare-a 变量名 B.declare-f 变量名 C.
6、typeset-r 变量名 D.typeset-i 变量名26.Shell 中可表示引用数组 abrr 中的所有非空元素的引用是(B)76A.$abrrB.$abrr*C.$#abrr*D.$#abrr27 .在 Shell 变量引用操作符可实现字符串替换其中(C)用来测试如果变量 stra 存在且不为空,则返回为 word,否则返回为空串 78A.$stra:-wordB.$stra:=wordC.$stra:+wordD.$stra:?word28 .在 Shell 变量引用操作符可实现字符串替换其中(D)用来测试,如果变量 stra 存在,则返回为变量 stra 的值,否则输出为word
7、,并退出当前脚本程序A.$stra-wordB.$stra=wordC.$stra:+wordD.$stra:?word29 .在 Shell 变量引用操作符可实现模式匹配替换其中(B)用来的含义是若 pattern 匹配变量 stra 的头部,则删除最长匹配部分并返回剩余部分。A.$stra#patternB.$stra#patternA.文件所有者文件所属组其他用户C.文件所属组文件所有者其他用户20.chmod 命令的权限模式可使用字符串形式或八进制形式,中每个八进制的三个二进制位从高到低分别表示为有无B.其他用户文件所属组文件所有者D.其他用户文件所有者文件所属组当使用八进制形式时模式
8、应由三或四位八进制构成,(A)A.读写执行 B.写读执行C.执行读写 D.执行写读A.赋予 shell 程序文件可执行权限,直接运行 shell 程序(外部命令)C.|D.都不是C.内部命令 D.外部命令D)C.$stabDunsetstabC.$stra%patternD.$stra%patternD)命令将这些变量送入进程转出区 8330 .为了使子进程能继承父进程中定义的变量,就必须使(A.readB.setC.shiftD.export31 .使用(D)形式时,即使表达式中有 Shell 的特殊字符时,也不必用双引号将其括起来。87A.test 表达式 B.表达式C.let 算术表达式
9、 D.(算术表达式)32.使用(D)形式时可以返回算术表达式的确切值A.test 表达式 B.let 算术表达式 C.(算术表达式)D.$(算术表达式)33 .gcc 可以对编译阶段进行控制,其中(B)选项规定编译到汇编语言,不进行其他操作。107A.-EB.-SC.-cD.-o34 .gcc 可以对编译阶段进行控制,其中(A)选项设定库文件的路径A.-LpathB.-IpathC.-llibraryD.-static35 .gcc 可以对编译阶段进行控制,其中(D)选项在可执行文件中包含标准调试信息,供 gdb 进行调试。A.-WallB.-WerrorC.-wD.-g36 .在 Linux
10、 底层文件访问中的大多数操作都是围绕文件描述符来展开的其中(A)函数是内核向进程返回一个文件描述符为以后使用 148A.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)152A.statB.lstatC.fstatD.
11、都不是40 .利用文件属性读取函数获取的 st_mode 进行文件类型测试方法正确的是 DA.对成员 st_mode 同文件类型掩码进行与运算 B.对成员 st_mode 直接判断C.利用带成员 st_mode 参数宏(用于文件类型判断)定义 D.A 和 C 都可以41 .下列函数中可关闭文件的函数(A)A.close()B.dup2()C.A 和 B 都可以 D.dup()42 .下列底层文件访问函数中第一个参数是文件描述符的是(C)157A.chmodB.lchownC.fchownD.chown43 .硬链接是(B)162A.指向目标文件的指针 B.指向文件的索引节点C.可跨越不同文件系
12、统创建 D.可通过 symlink()来创建44 .读取链接 readlink 和删除链接 unlink 操作对象是(C)163B.读取只对软链接有效,删除都两种都有效 D.读取对两种都有效,删除只对软链接有效。A.都只对硬链接有效B.都对软链接无效45 .目录文件的读取函数 readdir()参数和返回值的含义()A.参数和返回值都指向目录文件 B.参数和返回值都指向目录项C.参数指向目录文件,返回值指向目录项 D.返回值指向目录文件,参数指向目录项46 .对磁盘文件的标准 I/O 操作一般是实现(A)171A.全缓冲 B.行缓冲 C.不带缓冲 D.都可以47 .当标准输入和标准输出涉及交互
13、作用设备时,它们是(B)A.全缓冲 B.行缓冲 C.不带缓冲 D.都可以48 .标准错误车出是(C)A.全缓冲 B.行缓冲 C.不带缓冲 D.都可以49 .在函数 fopen()中文件打开模式中要求文件必须存在的模式是(A)172A.r 和 r+B.w 和 w+C.a 和 a+D.ab 和 wb50 .在函数 fopen()中文件打开模式中不是可读写的方式打开文件模式是(D)A.r+B.w+C.a+D.r51 .在打开函数中其中是在由指定的流上打开由路径名指定的文件,其返回值为指向文件流指针,此函数用于将一个指定的文件打开为一个预定义的标准流(C)A.openB.fopenC.freopenD
14、.fdopen52 .以下函数中表示从某流中读取一个字符但该函数不带参数,表示从标准输入流中读字符的函数是(C)174A.getsB.getcC.getcharD.fgec53 .当到达文件尾端或出错时,字符读取函数的返回值都是 EOF,为进一步确认文件是否已到文件尾,应当通过(B)函数来判断。A.ferrorB.feofC.cleanerrD.perror54 .在定位函数中,可直接将流的读写指针设置到文件的起始位置同时会将错误指示器 errno 清零的函数是()rewind182 无答案A.ferrorB.feofC.clearerr174D.perror55 .下面关于 ftell()函
15、数成功调用说法不正确的是(C)A.会清除流结束标志 B.返回读写指针当前相对文件起始位置的位移量C.返回读写指针当前相对文件结束位置的位移量 D.会撤销已调用 ungetc()对流的影响56 .格式化输出可把格式化数据输出到标准输出、指定文件及字符缓冲区。其中()函数是将格式化数据输出到指定大小的字符缓冲区。(D)183A.printfB.fprintfC.sprintfD.snprintf57 .格式化输入可从标准输入、指定文件及字符缓冲区读取格式化数据。其中()函数是输出到指定文件。(B)A.printfB.fprintf58.关于临时文件不正确的是 A186A.可通过 tmpnam()创
16、建C.程序结束时或关闭文件时自动删除C.sprintfD.snprintfB.也可通过 tmpfile()创建D.调用 tmpname 次数有限制C16759 .下列是进程的异常终止的是(D)193A.从 main 中调用 return 返回 B.调用 exitC.调用_exitD.调用 abort60 .不属于非格式化标准 I/O 的是(C)A.字符 I/OB.行 I/OC.列 I/OD.块 I/O61 .关于 exit()函数不正确的是(B)194A.先清理后进入内核 B.底层系统调用C.有一个整型参数62 .内核使程序执行的方法的是(A)A.调用 exec 函数 B.调用 exit/_e
17、xit63 .关于 atexit 函数正确的是(D)D.用于正常终止一个进程C.从 main 返回 D.收到一个系统终止信号A.一个进程可登记超过 32 个函数B.函数登记的顺序和调用顺序相同B.同一函数可登记多次,但调用一次D.在显示或隐式调用 exit 时则执行这些登记的终止处理程序64.非初始化数据段由 exec 赋初值常称为(C)196A.正文段 B.数据段 C.bss 段 D.堆65.在存储空间布局中从低地址到高地址依次分布为 AA.正文段一数据段一 bss 段一堆一栈C.正文段一堆一栈一数据段一 bss 段66.PID 为 0 的交换进程是(A)200B.栈一堆一 bss 段一数据
18、段一正文段D.堆一正文段一数据段一 bss 段一栈A.其他所有进程的祖先进程 B.所有其他用户进程的祖先进程C.其他所有内核线程的父进程 D.普通进程67.调用 exec 可能有变化的是(D)204A.调用前后进程 IDB.调用 exec 前后实际用户 IDC.调用 exec 前后实际组 IDD.调用 exec 前后有效用户 ID 和有效组 ID68 当 waitpid 函数的 pid 参数设置为(A)表示等待任一子进程终止。211A.pid=-1B.pid=0C.pid0D.pid-169.fork 函数在父进程中的返回值是(B)206A.0B.创建的子进程的进程标识号 C.-1D.170.
19、fork 函数在子进程中的返回值是(A)A.0B.创建的子进程的进程标识号 C.-1D.171.进程可以忽略大部分信号,但下列信号中(D)不能忽略 213A.SIGBORTB.SIGILLC.SIGQUITD.SIGKILL72.调用 exec 函数会将原来设置为要捕获的信号都更改为(A)214A.默认 B.忽略 C.另一捕获 D.默认或忽略77 .文件系统保存在磁盘的 BA.引导块 B.超级块 C.i 节点块 D.数据块78 .Linux 文件系统的根目录的 i 节点号为 CA.0B.1.C.2D.379 .文件描述符的数据类型是 BA.charB.intC.doubleD.float80
20、.设置文件偏移量的系统调用是 CA.truncateB.syncC.lseekD.create81 .下面那个不是 lseek 第三个参数的取值 CA.SEEK_SETB.SEEK_CURC.SEEK_NOWD.SEEK_END82 .可以使用(C)系统调用获得符号链接所引用文件名称A.linkB.symlinkC.readlink83 .获得工作路径名称的系统调用是 AA.getcwdB.getpwuidC.getgrgid84 .通过文件属性中的 uid 获得文件拥有者名字的系统调用是 BA.getcwdB.getpwuidC.getgrgid85 .通过文件属性中的 gid 获得文件所属
21、组名字的系统调用是 CA.getcwdB.getpwuidC.getgrgid86 .根据文件路径来改变文件权限使用系统调用是 BA.chownB.chmodC.fchmod一、填空题I.Linux 内核与发行版的关系:LinuxKernel3.5.3 是 Linux 内核版.而 Ubuntu12.04.1 是 Linux 的发行版2.Shell 是 linux 系统的一种命令行用户界面,提供了用户与操作系统进行交互的接口,本质上是命令解释器,可为用户提供个性化的使用环境。3 .在 Shell 中测试运算有文件属性测试、字符串测试、数值测试、数辑运算。4 .专门执行整数算术运算的命令 let
22、所指表达式可执行 C 语言中常见的算术、谡辑、位运算、比较运算等。5 .Vi 的三中工作模式:插入模式、命令模式、末行模式一。6 .Gcc 生成可执行文件的四个步骤:预处理、编译、汇编、链接。预处理是对源程序进行头文件加载和宏展开等操作,由 cpp 完成;汇编一是产生汇编代码,二是产生二进制的目标文件,由 gcc 使用 as;生成的多.o 文件和使用到的库文件链接成为可被操作系统执行的可执行程序,使用 ld 工具,可使用两类库文件。73.可用于在不同主机的进程间通信的技术是(D)225A.管道 B.共享内存74.只能在同源进程间通信的技术(A)224A.普通管道 B.命名管道75.不属于 Sy
23、stemVIPC 通信技术的是(A)A.管道 B.消息队列76.建立从父进程到子进程的管道的方法(B)225C.消息队列 D.套接字C.消息队列 D.共享内存C.信号量 D.共享内存A.父进程关闭管道的写端,子进程关闭管道读端B.父进程关闭管道的读端,子进程关闭管道的写端C.父子进程都管道的读端 D.父子进程都关闭管道的写端77.获取某个环境变量值使用函数AA.getenvB.putenvC.setenvD.unsetenvD.softlinkD.getloginD.getloginD.getloginD.fchown7 .库分为静态库和共享库。静态库由多个.o 文件组成的集合,文件成员没有特
24、殊的存在格式,使用“ar”可维护和管理,库文件后缀为“.a”;共享库多个.o 文件由编译器按照一定特殊的方式生成。多个可执行程序可共享库文件的代码段,但不共享数据。8 .命令行参数是 main。函数白勺参数yMain 函数的参数若有两个参数则第一个参数代表命令行参数个数、第二个参数代表指向各命令行参数字符串的指针数组。9 .Linux 中日期时间的表示方法有:算术类型、结构体类型、字符串类型。10 .如果一个 C 程序的入口表示为 main(intargc.char*argv).编译该程序后的可执行程序为 a.out,那么在命令./a.out-ffoo”后,main 中的参数 argv1指向的
25、字符串是(-f)。11 .Linux 系统下表示标准输入、标准输出和标准错误输出的文件描述符(符号表示)分别为(STDINFILENO、STDOUTFILENO、STDERRFILENO),它们的值分别为 0、1、2。12 .数字 635 表示的权限使用字母的方式表示为(rwwxr-x)、使用符号方式表示为(SIRUSR|SIWUSR|SIWGRP|SIXGRP|SIROTH|SIXOTH)。13 .系统调用 open 的功能是打开或创建文件。14 .使用 open 打开文件时有三个标志必须要选择其一,这三个标志是 ORDONLY、OWRONLY、ORDWR。15 .文件偏移量代表下一次读或写
26、的位置。16 .将文件偏移量市值为当前偏移处之前的 4 个字节的维护使用 lseek(fd,(4),(SEEKCUR)。17 .设置打开文件标志(OTRUNC)、可以截断文件为 0,使用系统调用(truncate)可以截断文件或者加长文件。18 .如果 umask 设置为 022,则创建一个新文件夹(数字表示)的权限为(644)、创建一个新目录的权限为(755)。19 .如果 umask 设置为 024,则创建一个新文件夹(数字表示)的权限为(642)创建一个新目录的权限为(753)。20 .使用系统调用(umask)可以设置和得到文件模式的屏蔽字。21 .创建硬链接使用系统调用(皿心),创建
27、符号链接使用系统调用(symlink)。22 .获得工作路径名称的系统调用是(getcwd)。23 .可以使用(stat 或 fstat 或 lstat)系统调用显示文件属性信息。24 .chmod,chown,utime 都可以修改文件 i 节点信息,其中 chmod 的功能是(更改文件权限)、chown 的功能是(更改文件所有者和所属组)、utime 的功能是(更改文件访问时间和修改时间)。25 .若实现将标准输出重定向到文件描述符为 6 对应的文件上,则应使用语句(dup2(6,1)。26 .系统调用(Unlink)的作用是删除目录项,这里的目录项是指(文件名和文件 i 节点的对应关系)
28、。27 .打开目录使用(DIR*opendir(constchar*name)系统调用,关闭目录使用(intclosedir(DIR*dir)系统调用,读取目录内容使用(structdirent*readdir(DIR*dir)系统调用。28 .chdir 系统调用的功能是(改变当前目录)。29 .创建目录使用(intmkdir(constcharpathname,modetmode)系统调用、删除目录使用(intrmdir(constchar*pathname)系统调用。30 .popen 函数实现的操作:创建一个管道,fork 一个子进程,然后关闭管道的不使用端,在子进程中 exexc 一
29、个 shell 以执行一条命令,然后等到命令的终止。31 .使用 kill 发送信号时,发送方进程应具有相应的权限:接受和发送进程的所有者相同,发送进程的所有者是超级用 m 三、简答题1.系统调用、库函数的区别和练习从用户角度观察,系统调用和库函数都以 C 函数形式出现,提供给用户一种功能实现的接口,需要用户输入指定的参数,调用结束得到指定的返回值。从实现者角度观察,库函数是在系统调用上层的函数,库函数一般指程序员可以使用的通用函数。系统调用由两部分组成:(1)核心函数:是实现系统调用功能的代码,作为操作系统的核心驻留在内存中,是一种共享代码。运行在核心O(2)接口函数:是提供给应用程序的 A
30、PI,以库函数的形式存在于 Linux 的 lib.a 中,该库中存放了所有系统调用的接口函数的目标代码,用汇编语言书写。其主要功能是把系统调用号,入口参数地址传给相应的核心函数,并使用户态下运行的应用程序陷入核心态。4 .完成如下命令(1)新建用户 tom 和用户组 student#useraddtom#passwdtom#groupaddstudent(2)新建文件 file#touchfile(3)将文件 file 改名为 test,然后将 test 拷贝到/home#mvfiletest#cptest/home(4)将/home/test 文件的拥有着修改为 tom,将文件所属组该为
31、student#chowntom:student/home/test5 .静态库和共享库的区别(1)静态库的代码在编译时就已连接到开发人员开发的应用程序中。(2)共享库只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。(3)静态库文件以.a 结尾,共享库文件以.so 结尾。6 .Linux 文件类型主要有哪七类?常规文件、目录文件、字符设备文件、块设备文件、管道文件、链接文件、套接字文件7 .简述文件、i 节点、文件名、目录之间的关系每个存在磁盘上的文件都由 i 节点和数据块两部分组成,i 节点和文件一一对应,一个 i 节点可以对应多个文件名,文件名和 i 节点的对应关系叫
32、做文件白硬链接,文件名和 i 节点的对应关系保存在目录文件中。8 .什么是文件描述符?(1)一个非负整数,内核以此来标识一个特定进程正在操作的文件。(2)012 代表三个标准的文件描述符,分别为标准输入、标准输出、标准错误输出9 .使用符号方式表示 rwxrwxrwx 权限S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH10 .写出 open 一下 6 种打开标志:只读、只写、读写、追加、文件不存在创建、截断为0O_RDONLYO_WRONLYO_RDWRO_APPENDO_CREATO_TRUNC1
33、1 .读程序,写出执行结果并解释得到该结果的原因 main()intfd1,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=3fd2=4原因:open 返回的文件描述符为最小可用的非负整数,012 是三个标准的文件描述符默认已经被占用,所以第一个open 的返回值为 3,第二个 open 返回的是 4。12 .回答 stat、fstat、latat 三个系统调用的区别stat 根据路径获得文件元
34、数据信息fstat 根据文件描述符获得文件元数据信息前两者如果遇到符号链接文件则会一直引用至非符号链接文件Istat 获得符号链接文件本身的文件元数据信息12.dup 和 dup2 的区别和联系联系:dup 与 dup2 都用来将新文件描述符指向原来文件描述符指向的打开文件描述。区别:dup 返回的新文件描述符为最小可用的文件描述符,dup2 返回的新文件描述符可以通过第二个参数指定。13.硬链接和符号链接的区别(1)命令ln 原文件硬链接文件(不能对目录创建硬链接)ln-s 原文件/目录符号链接文件(2)是否新增文件:硬链接不增文件,符号链接增加文件。(3)删除原文件/目录硬链接:对应 i
35、节点链接数-1。符号链接:符号链接文件失效。(4)删除链接文件删除硬链接文件,使对应 i 节点的链接数-1。删除符号链接文件,对原文件/目录无任何影响(5)是否跨文件系统:硬链接不可以,符号链接可以14.fork 与 vfork 区别?(1)fork 创建的子进程复制父进程的整个地址空间,vfork 不创建这一副本,子进程借用父进程的地址空间,直到其调用 exec 族函数或终止;(2)fork 创建的子进程和父进程相互独立地运行,而 vfork 创建子进程后挂起父进程,直到子进程终止或调用族函数。使用 kill 发送信号时,发送方进程应具有相应的权限:接受和发送进程的所有者相同,发送进程的所有
36、者是超级用户。15 .阅读以下代码,若 execlp 调用成功的话,“Done!”会打印输出吗?为什么?#includeintmain()printf(Runningpswithexeclpn);execlp(ps,“ps,-af”,0);printf(Done!n力exit(0);)不会输出Done!”。原因:执彳Texeclp(“ps,”-aT,硼用成功后,当前进程的地址空间被新的程序 ps 所替代,将执行“ps-af”16 .试写出下列程序段的运行结果,并解释原因intx=0,inty=0;voidthread1(void)execprintf(Thisispthreadl.thesen
37、tence1n);y=7;sleep(1);printf(Thisispthread1.thesentence2n);x=x+y;voidthread2(void)printf(Thisispthread1.thesentence1n);x=4;sleep(1);printf(Thisispthread1.thesentence1n);y=8+y;voidmain(void)pthread_tid1,id2;pthread_create(&id1,NULL,(void*)thread1,NULL);pthread_create(&id2,NULL,(void*)thread2,
38、NULL);pthread_join(id1,NULL);pthread_join(id2,NULL);printf(x=%d,y=%dn”,x,y);答案:Thisispthread1.thesentense1Thisispthread2.thesentense1Thisispthread1.thesentense2Thisispthread2.thesentense2x=11,y=15原因:(1)线程 1 先运行,线程 2 后运行。线程 1 执行 sleep(1);后阻塞,线程 2 继续执行,线程 2 执行到 sleep(1);时线程 2 阻塞,线程 1 阻塞结束继续执行,线程 1 执行结
39、束后线程继续执行到结束。(2)线程 1 和线程 2 共享进程的数据段,因此共享变量 x,v。17 .进程间通信的六种方式是什么?简述他们的通信原理?(1)信号:用于通知接收进程有某种事件发生。(2)管道:连接一个进程的输出至另一个进程的输入的一种方法。(3)信号量:一个计数器,用来记录对某个资源的使用情况。(4)共享内存:允许多个进程访问同一块内存空间。(5)消息队列:消息的链表,链表中每个节点包括消息类型和正文两部分。(6)套接字:在网络上主机间进程进行通信的方式。18 .PIPE 与 FIFO 的区别与联系PIPE 为未命名管道,FIFO 为命名管道。联系:PIPE 和 FIFO 都是单向
40、传输,一端为读,另一端为写。区别:PIPE 只能在有亲缘关系的进程中使用,如父子进程;FIFO 有名字,所以只要知道该名字,无关进程之间也可以使用。19 .书名产生信号的几种方式?(1)用户操作。如键盘操作 Ctrl-C,最终使得内核产生信号 SIGINT。(2)进程执行出错。如浮点数溢出,内核也会产生信号。(3)进程执行某个系统调用。如调用 kill 向某个进程或进程组发送信号。20 .说明信号传递的过程。(1)生成(generating)o内核要更新目标进程的数据结构,表示一个新的信号已经被发送给此进程。此时,进程并没有对信号做出任何响应。(2)传递(delivery)。强迫目标进程对信号
41、做出响应。四、编程题1 .向文件 f1 中写入“helloworld!”,然后再将 f1 中的内容读出并显示在屏幕上。(注意必要的错误判断)#include#include#includeintmain()intfd;charbuf113=helloworld!;charbuf212;intnum;fd=open(f1,O_RDWR|O_CREAT|O_TRUNC,0644);if(fd=-1)perror(f1notopen);exit(1);num=write(fd,buf1,sizeof(buf1)-1);if(num!=(sizeof(buf1)-1)printf(writelesst
42、hanwantn);lseek(fd,0,SEEK_SET);num=read(fd,buf2,12);if(num!=12)printf(readlessthan12n);write(1,buf2,12);close(fd);2 .向文件 f2 中写入“aabbccddee,,然后将偏移量移到绝对值偏移为 4 的位置处,读 6 个字符,并将结果显示在屏幕上#include#include#includeintmain()intfd;charbuf111=aabbccddee;charbuf210;intnum;fd=open(f2,O_RDWR|O_CREAT|O_TRUNC,0644);i
43、f(fd=-1)perror(f2notopen);exit(1);num=write(fd,buf1,sizeof(buf1)-1);if(num!=(sizeof(buf1)-1)printf(writelessthanwantn);lseek(fd,4,SEEK_SET);num=read(fd,buf2,6);if(num!=6)printf(readlessthan6n);write(1,buf2,6);close(fd);3 .向文件 f3 中写入“aabbccddeeffgghh”,然后将文件截短后的文件内容读出并显示在屏幕上#include#include#includeint
44、main()intfd;charbuf117=aabbccddeeffgghh;charbuf28;intnum;fd=open(f3,O_RDWR|O_CREAT|O_TRUNC,0644);if(fd=-1)perror(f3notopen);exit(1);num=write(fd,buf1,sizeof(buf1)-1);if(num!=(sizeof(buf1)-1)printf(writelessthanwantn);lseek(fd,0,SEEK_SET);ftruncate(fd,8);num=read(fd,buf2,8);if(num!=8)printf(readlesst
45、han8n);write(1,buf2,8);close(fd);4 .实现“cat 文件名”显示文件内容#includemain(intargc,char*argv 口)intfd;intnum;charbuf10;if(argc!=2)(printf(missfilenamen);exit(1);fd=open(argv1,O_RDONLY);if(fd=-1)(perror(erroropen);exit(1);while(num=read(fd,buf,10)!=0)write(1,buf,num);close(fd);5 .实现“cp 原文件目标文件”#include#include
46、main(intargc,char*argv)(intfrom,to;intnum;charbuf10;if(argc!=3)(printf(argumenterrorn);exit(1);from=open(argv1,O_RDONLY);to=open(argv2,O_WRONLY|O_CREAT|O_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”通过输出重
47、定向方式写入文件#include#include#include#include#includemain()(intfd;if(fd=open(f1,O_WRONLY|O_CREAT,0644)=-1)perror(openfail);if(dup2(fd,1)=-1)perror(Redirectfailed);printf(Helloworldn);close(fd);f1 中7,使用 fork 创建进程,在子进程中打印Iamthechild”和子进程 pid,在父进程中打印Iamthefather和父进程 pid#include#include#includeintmain()(pid_
48、tpid;pid=fork();if(pid0)(perror(fork);exit(1);elseif(pid=0)printf(Iamthechildn);elseprintf(Iamthefathern);exit(0);8 .创建子进程,在子进程中执行“ps-A”命令,父进程等待子进程结束后打印“childover”及所处理的子进程进程号#include#includemain()(pid_tpid,cpid;inti;char*args64;args0=ps”;args1=-A;args2=NULL;pid=fork();if(pid0)(perror(“fork”);exit(1);)elseif(pid=0)(execvp(args0,args);exit(0);)else(cpid=wait(NULL);printf(childoveCpid=%dn”,cpid);)9 .编写程序处理 SIGINT 信号,当程序接收到 SIGINT 信号后出“SIGINTiscaught”#include#includevoidsignal_handler(intsignum)(switch(signum)(caseSIGINT:printf(SIGINTiscaught!n);break;)intmain()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗健康管理在商业领域的应用与挑战
- 教案检查工作总结模版
- 上海 房东租房合同范例
- 红褐色扁平风网络安全模板
- 储罐厂家供货合同范例
- 产品定制打样合同范例
- 供销付款合同范例
- 防溺水安全家长会发言稿模版
- 住建部买房合同范例
- 职业性硬皮病的临床护理
- 遴选会计笔试真题及答案
- 海南旅游演艺融合发展问题探讨
- 2025年北京大兴区中考一模数学试卷及答案详解(精校打印)
- 2024年中国光大银行招聘考试真题
- 房地产公司2025年度项目开发计划
- 物业保盘计划制作与实施指导
- 2025年储能项目可行性分析报告
- 2025年北京市海淀区九年级初三一模英语试卷(含答案)
- 2025年山西焦煤集团国际发展股份有限公司招聘笔试参考题库附带答案详解
- DB32T 4793-2024球墨铸铁管排水系统应用技术规程
- 八年级音乐上册校园的早晨省公开课一等奖新课获奖课件
评论
0/150
提交评论