0.1004

五煦查题

快速找到你需要的那道考题与答案

moocLinux编程技术_2答案(慕课2023课后作业答案)

65 min read

moocLinux编程技术_2答案(慕课2023课后作业答案)

第一章 Linux基础知识

单元测试1

1、程技在给定文件中查找与设定条件相符字符串的术答命令为
A、gzip
B、案慕案grep
C、课课find
D、后作sort

2、业答为了将当前目录下的程技压缩归档文件myftp.tar.gz解压缩,可以使用命令
A、术答tar -xvf myftp.tar.gz
B、案慕案tar -xvz myftp.tar.gz
C、课课tar -vzf myftp.tar.gz
D、后作tar -xvzf myftp.tar.gz

3、业答在shell环境中,程技移动文件使用的术答命令是
A、cp
B、案慕案ls
C、rm
D、mv

4、Linux/UINX系统中top命令的作用是
A、显示系统瞬间的进程信息
B、对标准输出排序
C、向进程发送信号
D、动态监视系统任务

5、任何时候用户需要回到上一级目录,可以命令
A、cd .
B、cd ..
C、cd /
D、cd ~

6、/root目录是
A、系统的根目录
B、超级用户的个人主目录
C、动态连接库存放目录
D、系统管理程序存放目录

7、文件file1的访问权限为744,现要取消该文件的文件所有者的执行权限,同时增加该文件的同组用户的写权限,可以使用下列哪个命令?
A、chmod u-x, g+w file1
B、chmod u+x, g+w file1
C、chmod 777 file1
D、chmod g+w file1

8、哪个符号加在命令后面可以在后台执行程序_______。
A、#
B、@
C、&
D、*

9、对所有用户的变量设置,应当放在哪个文件下?
A、/etc/bashrc
B、/etc/profile
C、~/.bash_profile
D、/etc/skel/.bashrc

10、系统调用是( )。
A、一条机器指令
B、中断子程序
C、用户子程序
D、提供编程人员的接口

11、当中央处理器处于内核态时,可以执行的指令是( )。
A、计算机系统中的全部命令
B、仅限于非特权指令
C、仅限于访管指令
D、仅限于特权指令

12、一个类Unix操作系统具有可移植性,是指它需遵循( )。
A、API
B、ABI
C、POSIX
D、ASCII

13、在Linux命令字符界面,编辑一个C语言源程序的工具可以是( )。
A、vim
B、gedit
C、vi
D、所有选项都是

14、vim的3种模式之间的切换操作如下图所示,假设当前处于编辑模式,切换到命令模式,需要使用( )命令。
A、Esc 和:
B、Esc
C、:
D、Esc和a

15、gcc命令可以启动C编译系统。当执行gcc命令时,它可以完成( )步骤 。
A、预处理、编译
B、编译、汇编和链接
C、预处理、编译、和链接
D、预处理、编译、汇编和链接

16、学习系统编程一般分三步:分析程序、学习系统调用、编程实现。

17、glibc是GUN发布的libc库,即c运行库。glibc是Linux系统中最底层的API,几乎其它任何运行库都会依赖于glibc。

18、GNU C库是Linux内核系统调用接口的封装,其中包括POSIX兼容应用函数调用。

19、GNU是GNU Is Not Unix的递归缩写,是自由软件基金会的一个项目。

20、GPL是General Public License的缩写,它允许软件作者拥有软件版权,但授予其他任何人以合法复制、发行和修改软件的权利。

21、Linux是一种操作系统,具有支持多用户、多任务、单线程和多CPU等特点。

22、Linux可以运行在x86、PowerPC、ARM、SPARC、MIPS、68k等体系结构上。

23、bash是一种命令解释器(shell)。

24、Linux内核版本号由3组数字组成:主版本号、次版本号、次次版本号。如内核版本4.8.2,4为主版本号,8为次版本号,9为次次版本号。

25、要使一个可执行文件可以被gdb调试,那么在使用编译器gcc编译程序时需要加入-j选项。

26、make工程管理器是一个“自动编译管理器”,make工具依赖一个特殊的、名字为makefile或Makefile的文件,这个文件描述了系统中各个模块之间的依赖关系。

27、在Linux中,硬件设备大部分安装下/mnt目录下。

28、AT&T Bell Laboratory是Linux的创始人。

29、“cat -n test.c”命令表示将文件test.c的内容加上行号后显示输出。

30、gcc命令只能编译.c、.s、.i、.o类型文件,不支持.a、.C、.cc、.cpp类型文件。

单元作业1

1、上机练习Linux的字符命令:ls、cd、mkdir、rmdir、rm、rm -r、mv、cp、cat、more、less、pwd,并说明字符命令基本功能,截图展示操作结果。

2、上机编写求n阶乘的C语言文件,使用gcc工具编译该源程序并运行。对n阶乘文件设置断点,使用gdb工具观察该程序的递归调用过程,并观察n的值。 运行结果截图展示。

3、简述Linux中的库函数、系统调用、ANSI标准、POSIX标准、内核态、用户态这6个概念的含义?

4、写出你所装Linux系统的商业版本和内核版本,并说明版本编号的含义?列出/目录下第一级目录及文件的名称和大致说明。

第二章 文件及目录管理

单元测试2

1、用ls –al 命令列出下面的文件列表,_______文件是符号连接文件。
A、lrwxr--r-- 1 helusers 2024 Sep 12 08:12 cheng
B、srw-rw-rw- 2 hel-susers 56 Sep 09 11:05 hello
C、-rwxrwxrwx 2 hel-susers 56 Sep 09 11:05 goodbey
D、drwxr--r-- 1 helusers 1024 Sep 10 08:10 zhang

2、在默认状态下,对应文件不是系统标准I/O设备的文件描述符是
A、0
B、1
C、2
D、3

3、若Linux系统中的一个普通文件访问权限为:属主允许读、写、执行,组用户允许读,其他用户无权限访问,则其权限显示为_____。
A、s---r--rwx
B、----r—rwx
C、drwxr-----
D、-rwxr-----

4、以下不属于特殊权限位的是____。
A、sticky
B、suid
C、sgid
D、stat

5、在ext2文件系统中,不包含以下_______类型的块。
A、校验块
B、超级块
C、inode表
D、数据块

6、UNIX/Linux系统中标准错误的文件描述符值为
A、0
B、1
C、2
D、3

7、调用lseek函数时,设置第三个参数为SEEK_END,以下哪种说法是正确的?
A、设置文件的当前位置时以文件尾作为基准值
B、设置文件的当前位置时以文件头作为基准值
C、设置文件的当前位置时以当前的文件偏移量作为基准值
D、设置文件的当前位置时以文件长度作为基准值

8、当进程试图写入某个文件时,Linux内核判断该进程是否具有写权限是依据( )。
A、进程ID
B、进程的父进程ID
C、进程的有效用户ID
D、进程的真实用户ID

9、进程通过fopen()打开的每一个文件,Linux内核都会为其创建一个( )数据结构,进程所有打开文件的这个结构由fd_array[]数组指向,内核通过文件描述符引用fd_array[]数组下标,从而访问这个结构。
A、task_struct{ }
B、file{ }
C、fd
D、FCB

10、遵循( )标准的fread操作使用了带用户缓冲区的读文件操作,用户程序数据区对磁盘数据读前,需经过系统管理的用户缓冲区进行缓冲,从而减少了读磁盘的I/O总次数。
A、ANSI
B、GUN
C、POSIX
D、GPL

11、( )函数可以对已打开的文件描述符进行各种控制操作以改变已打开文件的各种属性。
A、chmod
B、fcntl
C、chown
D、umask

12、( )函数是将内存中的数据写入文件中。
A、open
B、read
C、write
D、create

13、关于如下命令和其结果,不正确的叙述是?( ) root@ubuntu:~# ls / -ail 2 drwxr-xr-x 23 root root 4096 3月 24 16:07 . 2 drwxr-xr-x 23 root root 4096 3月 24 16:07 .. 3407873 drwxr-xr-x 2 root root 4096 10月 28 2015 bin
A、当前目录是不是根目录
B、bin是目录
C、3407873 是bin的inode结点编号
D、bin目录的所有者是root、用户所属组是root

14、下列关于链接的描述,错误的是( )
A、硬链接就是让链接文件的inode编号指向被链接文件的inode编号
B、硬链接和符号链接都会产生一个新的inode结点
C、链接分为硬链接和软件链接
D、硬链接不能链接目录文件

15、Linux使用root账户的shadow文件存放用户账户密码,只有root账户才可以读写shadow,普通用户如何通过执行passwd命令修改个人的账户密码。( )
A、修改passwd命令的权限为:rwsr-xr-x
B、修改passwd命令的权限为:rws--s--x
C、修改shadow文件的权限为:rw-r--r-s
D、修改shadow文件的权限为:rwsr-xr-x

16、在Linux系统中,设备被当作文件来访问。

17、Linux文件系统中每个文件用i-node结点来标识。

18、Linux系统中,一切皆文件。

19、readdir函数的返回值为空一定意味着目录遍历的结束。

20、在Linux/UNIX系统中,为了删除一个文件,必须对包含该文件的目录具有写权限和执行权限。

21、lstat函数将会返回符号链接引用文件的文件属性。

22、通过mkdir函数创建一个新的空目录,其中的. 和 .. 两个目录项需要手动创建。

23、根据文件路径来改变文件权限使用的系统调用是chmod。

24、Linux为了对文件进行管理,同进程PCB一样,它为每个文件设计了一个叫FCB的数据结构,FCB用于描述文件当前情况和控制文件的所需信息。

25、在内核中,通过一个无符号的32位短整型st_mode数据结构存放某一文件的类型、特殊属性和访问权限等信息。

26、文件流是指向FILE结构体类型的一个指针,该结构体中定义了一组char类型的指针用来管理用户I/O数据缓冲区,同时对文件描述符_fileno进行了封装。

27、read系统调用和write系统调用的参数count只是一个“愿望值”。

28、fd=open("example.c",O_CREAT|O_EXCL,S_IRUSR|S_IWUSR));语句使用open系统调用在当前目录下创建一个名为example.c的文件,并且新文件的存取权限为所有者同组用户可读可写。

29、opendir函数会返回一个类似于文件描述符的dirent结构体指针,称为dirent流,用来保存打开的目录信息,对目录的一些操作需要借助dirent完成,比如读目录readdir函数。

30、调整文件偏移量位置的off_t lseek(int fd, off_t offset, int whence)函数,第三个参数取值SEEK_SET表示从文件开始处计算偏移量。

31、int stat(const char *path, struct stat *buf)函数可以获得path路径中文件的属性,获取的文件属性信息保存在buf中。

单元作业2

1、说明系统I/O和标准I/O的区别,并说明它们的适用场合。

2、什么是文件描述符?什么是流?二者有什么区别和联系?

3、设计一个程序,要求打开文件“pass”,如果没有这个文件,新建此文件;读取系统文件“etc/passwd”,把文件中的内容都写入“pass”文件。

4、使用fcntl函数的文件记录锁功能,实现多个进程对同一文件进行读或写的共享操作。

第三章 进程管理

单元测试3

1、以下哪种状态不是进程所拥有的状态。
A、运行态
B、就绪态
C、生存态
D、阻塞态

2、( )是操作系统中最重要、最基本的概念之一,它是系统分配资源的基本单位,是一个具有独立功能的程序段对某个数据集的一次执行活动。
A、程序
B、进程
C、作业
D、线程

3、在Linux操作系统中,运行态和就绪态进程的状态被统一为( )。
A、TASK_RUNNING
B、TASK_INTERRUPTIBLE
C、TASK_READY
D、TASK_ZOMBIE

4、对以下程序运行成功时描述正确的是( )。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> main() { pid_t pid; if((pid=fork())==-1) { perror(“fork”); exit(EXIT_FAILURE); } printf(“hello\n”); return 0; }
A、父进程先输出一个hello,子进程再输出一个hello
B、只有子进程输出一个hello
C、只有父进程输出一个hello
D、父子进程各输出一个hello

5、eXec族函数中,只有( )是系统调用,其他五个都是库函数。
A、execvp
B、execlp
C、execve
D、execv

6、以下( )不是waitpid与wait函数的不同之处。
A、waitpid可等待一个特定的子进程
B、waitpid可以带回子进程结束的状态
C、waitpid可以不阻塞调用进程
D、waitpid支持作业控制

7、以下哪种方式会导致进程的异常退出。
A、进程中调用了exit函数
B、被接收到的信号终止
C、遇到main函数中的return语句
D、进程中调用了_exit函数

8、以下函数会在被调用时刷新进程所打开的流对象的是( )。
A、exit
B、on_exit
C、atexit
D、_exit

9、setsid函数用来设置进程的____。
A、进程组号
B、进程号
C、父进程号
D、会话号

10、Linux系统中大多数的软件服务器属于______。
A、守护进程
B、僵尸进程
C、孤儿进程
D、内核进程

11、task_struct结构体用来保存_____。
A、会话的环境
B、文件的基本信息
C、进程的PCB
D、任务的基本信息

12、下列eXec函数中调用者可以通过数组指定命令行参数并通过相对路径查找可执行文件的函数是________。
A、execvp
B、execl
C、execve
D、execlp

13、调用fork函数后该函数返回值为0,说明出现以下何种情况?
A、创建子进程出错
B、当前代码运行在子进程中
C、当前代码运行在父进程中
D、当前代码运行在主线程中

14、调用fork函数后下列哪一种不属于父子进程之间共享的内容?
A、父进程已打开的文件描述符
B、父进程的正文段
C、环境变量
D、进程ID

15、下面哪个函数既可以指定所等待子进程的ID又可以请求内核返回子进程使用的资源情况汇总?
A、wait
B、waitpid
C、wait3
D、wait4

16、下列何种情况下会出现不同进程共享相同文件表的情况?
A、不同进程分别打开同一文件
B、不同进程分别打开不同文件
C、父子进程分别打开同一文件
D、打开文件的进程创建子进程

17、下列关于进程和程序的描述中哪一项是不正确的?
A、程序只能在前台运行,而进程可以在前台或后台运行
B、程序是一组有序的静态指令,进程是程序在某个数据集上的执行
C、程序可以长期保存在存储介质中,而进程是有生命周期的
D、进程和程序并不是一一对应的关系

18、在Linux操作系统中,处于阻塞态的进程可以被信号唤醒。

19、调用fork时,父子进程得到的返回值不同,可用此值来区分父子进程。其中父进程的返回值为子进程的进程号,子进程的返回值为-1。

20、以下程序执行成功时,最后显示的内容是:作业答案查询

This is the end作业答案查询

#include <stdio.h> #include <unistd.h> int main() { char * argv[ ]={ “cp”,”/etc/passwd”,”tmppass”,NULL}; printf(“Let’s use execvp.\n”); execvp(“cp”,argv); printf(“作业答案查询

This is the end作业答案查询

”); }

21、fork和vfork函数都可以用来创建新进程。

22、父进程先于子进程结束,将会导致子进程成为僵尸进程。

23、exec函数并不影响执行前打开的文件描述符集合。

24、在UNIX/Linux系统中,可以认为操作系统用了三张表来描述一个被进程打开的文件。

25、在Linux系统中,可执行文件的格式为ELF,可以使用file或readelf命令来查看文件的情况。

26、根据以下命令及结果, [huangru@xiyoulinux archive]$ size ex1 text data bss dec hex filename 915 204 40 1159 487 hello 说明hello文件大小为1159字节,其中代码段915字节,数据段204字节,bss段是40字节。

27、在Linux环境下,可以使用top和ps命令来查看进程的情况,区别是top命令反映的是系统进程动态信息,ps命令反映的是系统进程过去的一次性快照。

28、在Linux中一个进程的内存映像包含:代码区、数据区、BSS区、堆区和栈区。其中BSS区用来存放未初始化的全局变量和静态变量。堆区(heap)用于存放进程运行中被动态分配的内存段。

29、Linux中进程的状态,其中TASK_UNINTERRUPTIBLE表示可唤醒阻塞态,TASK_ZOMBIE表示僵死(僵尸)状态。

30、execve("hello",argv,envp);语句表示创建一个新进程,执行hello代码,为main函数传递argv入口参数,以envp为环境执行 hello。

31、main函数的return或隐含返回,以及调用exit和_exit函数都是Linux系统的异常退出。

32、守护进程独立于控制终端,运行在前台,执行日常事务的特殊进程,Linux的大多数服务器是以守护进程实现的。

单元作业3

1、简述在Linux系统中进程状态是如何转换的?至少回答6种状态间的转换关系。

2、查阅资料,说出创建进程一般都有哪些方法?并简述fork创建进程的内核过程?

3、编写一个程序,程序中创建一个子进程用来打开你的Linux系统中的浏览器;父进程等待子进程结束后输出进程的退出值。

4、编写一个程序,创建一个僵尸进程并用ps命令显示该进程的状态。 编写一个程序,创建一个孤儿进程并用ps命令显示该进程的状态。

第四章 管道与重定向

单元测试4

1、重定向是由_______实现的。
A、用户程序
B、Shell
C、命令
D、内核

2、在实现man -k directory | grep read命令时,使用的是______。
A、管道
B、共享内存
C、消息队列
D、信号量

3、命令cat file>>file2将会( )。
A、将file2的内容复制给file1
B、将file1的内容复制给file2
C、将file1的内容添加到file2已有内容之后
D、将file1的内容插入到file2已有内容之前

4、将标准输出重定向到文件描述符为6对应的文件上,对应的c程序语句为______。
A、6=dup(1);
B、dup(6);
C、dup2(1,6);
D、dup2(6,1);

5、以下关于管道的描述错误的是( )。
A、匿名管道只能以单工的方式通信
B、如果管道中无数据,则读进程将被挂起直到数据被写进管道
C、如果所有写进程都关闭了管道的写端时,read返回0,意味着文件的结束
D、使用pipe函数时,得到的文件描述符数组中,下标为0的是管道的写端

6、下面对管道的描述中哪一个是不正确的_________。
A、父子进程间可以使用
B、对管道的访问无需再考虑互斥问题
C、管道存在于用户空间中
D、管道是一种特殊文件

7、管道的读写操作是以( )的方式进行的。
A、二叉树
B、栈
C、队列
D、哈希表

8、下列有关管道的说法错误的是( )。
A、读操作和写操作分别在管道的两端进行
B、若写入管道的数据字节数大于管道的剩余空间,则返回错误以提示稍后再写
C、读写管道的操作都是原子性的
D、命名管道与匿名管道的读写操作都遵循先进先出原则

9、创建命名管道除了使用mkfifo函数外,还可以使用( )函数。
A、pipe
B、mknod
C、mkdir
D、touch

10、以下命令可以将标准错误重定向的是( )。
A、ls -l /home 2<err.txt
B、ls -l /home 1>err.txt
C、ls -l /home 3>err.txt
D、ls -l /home &>err.txt

11、Shell可以管理命令或程序的输入输出。

12、标准错误stderr无法重定向。

13、管道只能用于有亲缘关系的进程进行通信。

14、以下语句创建了一个匿名管道,其中parr[1]记录了管道的读端,parr[0]记录了管道的写端。 int parr[2]; pipe(parr);

15、管道是一种特殊的文件,所以操作文件时可以使用的函数都可以用于操作管道。

单元作业4

1、为什么管道只能以单工方式通信?

2、说明通过程序是如何实现重定向的(即实现重定向的过程)。

3、请编写一个程序实现兄弟进程通过管道进行信息传递

4、使用popen和pclose函数实现cat file_example|grep root命令。

第五章 信号

单元测试5

1、以下哪一种情况不会产生信号。
A、进程执行出错时
B、用户通过终端输入Ctrl+c等产生信号的字符
C、从信号处理函数退出时
D、一个进程调用kill向另一个进程发送信号

2、以下哪种信号处理方式不需要提前安装信号处理函数。
A、按默认方式处理
B、捕捉信号
C、忽略信号
D、三种方式都需要

3、向指定进程发送一个信号可使用函数( )。
A、kill
B、alarm
C、pause
D、raise

4、以下信号不能被忽略的是( )。
A、SIGHUP
B、SIGINT
C、SIGSTOP
D、SIGQUIT

5、kill(pid,signum)函数中,当参数pid为0时表示( )。
A、向进程号为0的进程发送signum信号
B、向与调用kill函数的进程同组的进程发送signum信号
C、向所有进程发送signum信号
D、错误,参数pid不能为0

6、以下哪个函数无法产生信号?
A、kill
B、raise
C、alarm
D、pause

7、以下关于捕捉信号的说法错误的是( )。
A、可以使用signal函数安装信号处理函数
B、可以使用sigaction函数安装信号处理函数
C、signal函数无法获取指定信号当前的处理函数
D、sigaction函数无法获取指定信号当前的处理函数

8、以下关于屏蔽信号的说法正确的是( )。
A、通常是设置一个需要屏蔽的信号集
B、只能在安装信号时设置需要屏蔽的信号
C、信号一旦被屏蔽就无法取消屏蔽
D、不可以屏蔽单个信号

9、以下不属于伪信号处理函数的是( )。
A、SIG_IGN
B、SIG_DFL
C、SIG_ERR
D、SIGINT

10、以下关于信号机制描述错误的是( )。
A、信号是一种异步通信机制
B、信号是内核产生的
C、使用信号必须安装信号处理函数
D、进程对于接收到信号这一事件是不可预知的

11、支持排队的信号被称为不可靠信号。

12、使用signal函数时,可以设置要屏蔽的信号集。

13、信号是一种通信机制,可以用于处理异步事件。

14、当进程响应信号x转去执行信号处理函数时又收到了信号y,此时若处理信号y,一定会发生数据损毁。

15、信号机制不仅可以向进程通知事件,还可以给进程传递数据。

单元作业5

1、信号有哪些来源?进程可以用哪些方式响应信号?

2、请说明在处理信号时,数据损毁是如何产生的,应如何避免?

3、编写一个程序,当该程序接收到SIGUSR1信号时,显示当前系统时间。

4、编写一个程序,以信号SIGTERM结束程序参数所指定的进程(通过进程号指定)。

第六章 SYSTEM V IPC

单元测试6

1、以下进程间通信方式属于异步通信方式的是_________。
A、管道
B、信号
C、共享内存
D、消息队列

2、下面对进程间通信的共享内存机制的描述中哪一个是不正确的?
A、对共享内存的访问无需再考虑互斥问题
B、是最快的进程间通信机制
C、共享内存是共享资源
D、每个进程可以在自己的地址空间中访问同一段共享内存

3、可以使用命令( )获取当前系统中所有IPC资源的状态。
A、kill
B、get
C、ftok
D、ipcs

4、以下通信机制属于 SYSTEM V IPC机制的是( )。
A、信号
B、信号量
C、套接字
D、管道

5、客户端使用服务器创建的共享内存可使用函数( )。
A、shmint
B、shmget
C、shmat
D、shmdt

6、以下不属于SYSTEM V IPC的通信机制是( )。
A、信号量
B、信号
C、共享内存
D、消息队列

7、以下关于通信机制的描述错误的是( )。
A、套接字可用于不在同一台主机的两个进程通信
B、信号量可以用于实现多进程间的同步与互斥
C、共享内存适用于在进程间传输大量的数据
D、每次对消息队列进程读操作时,会返回队列的第一个消息

8、( )不是进程通信的目的。
A、传输数据
B、发送控制信号
C、协调同步或互斥
D、预防死锁

9、以下关于IPC对象的描述正确的是( )。
A、创建IPC对象时,需要约定一个键值,保证通信的多个进程会合在同一个IPC对象上
B、通信的多个进程可分别使用宏IPC_PRIVATE创建IPC对象并使用该对象通信
C、使用IPC对象的键值也可以操作IPC对象
D、使用IPC对象通信时,必须在通信的每一个进程中使用相同的键值创建IPC对象,才能实现通信

10、以下关于信号量的描述错误的是( )。
A、信号量通常作为其他通信机制的辅助手段
B、信号量通常以集合的形式出现
C、信号量的初值通常为0
D、在semop操作中设置SEM_UNDO标识,可由内核来维护信号量的数值

11、SYSTEM V IPC中信号量集机制中信号量的P操作和V操作都是通过调用semop函数来实现的。

12、使用共享内存无法解决多个进程同时读写的冲突。

13、操作IPC对象时,既可以使用该对象的键值,也可以使用该对象的id值。

14、使用共享内存的进程在创建或关联了共享内存后,还需要将共享内存绑定到自己的进程空间中。

15、信号量也可用于线程间通信。

单元作业6

1、进程通信的目的有哪些?有哪些通信方式,各有什么特点?

2、请简要说明使用共享内存实现进程间通信的操作过程,说明每一步骤所使用的函数或系统调用。

3、编写一个程序,两个进程使用消息队列进行通信,传递tmp.txt文本的内容。

4、编写一个客户机-服务器程序,服务器和客户机使用共享内存通信,服务器产生当前时间提供给客户机使用,并使用信号量协调多个客户机程序互斥读取共享内存。

第七章 线程管理

单元测试7

1、在POSIX中,创建线程使用( )函数。
A、create_thread
B、pthread_create
C、create
D、create_pthread

2、以下哪一项不是线程与进程对比的优点?
A、创建线程花费的时间少
B、线程间切换的速度快
C、线程间通信更加方便省时
D、线程拥有更灵活的调度策略

3、线程使用以下哪种方式退出时,无法保证不结束整个进程?
A、从启动例程中返回
B、被统一进程的其他线程取消
C、调用pthread_exit
D、线程执行eXec函数后,导致当前进程地址空间全部更新

4、以下叙述正确的是( )。
A、用户级线程的创建、调度和撤销也需要内核支持
B、内核级线程的程序实体只能运行在内核态
C、操作系统可以感知到内核级线程,无法感知到用户级线程
D、用户级线程在执行系统调用时不会导致所属进程被中断

5、以下说法正确的是( )。
A、只有用户级线程的操作系统中,调度以进程为单位,由用户程序控制进程中的多个线程运行。
B、只有用户级线程的操作系统中,调度以进程为单位,由操作系统控制进程中的多个线程运行。
C、只有用户级线程的操作系统中,调度以线程为单位,由用户程序控制进程中的多个线程运行。
D、只有用户级线程的操作系统中,调度以线程为单位,由操作系统控制进程中的多个线程运行。

6、以下不属于线程私有资源的是
A、线程号
B、调度优先级和策略
C、文件描述符表
D、信号屏蔽字

7、调用pthread_create函数创建一个线程后,( )会先运行。
A、创建的新线程
B、调用pthread_create函数的线程
C、该进程的主线曾
D、创建的新线程或调用pthread_create函数的线程

8、以下哪种情况不会导致线程被取消
A、线程处于CANCELED状态,且线程收到了取消信号
B、线程处于CANCELED状态,且线程调用了pthread_testcancel函数
C、处于CANCELED状态的线程收到了取消信号,且运行到了取消点
D、处于CANCELED状态的线程收到了取消信号,且取消类型为同步

9、以下关于线程清理函数的说法,错误的是( )。
A、pthread_cleanup_push和pthread_cleanup_pop函数必须成对使用
B、pthread_cleanup_push和pthread_cleanup_pop函数都是以宏的形式实现的
C、线程从其代码中的pthread_exit函数结束时,会引发pthread_cleanup_push和pthread_cleanup_pop函数执行
D、线程从其代码中的return语句结束时,会引发pthread_cleanup_push和pthread_cleanup_pop函数执行

10、以下关于线程属性的说法,正确的是( )?
A、线程的每个属性对应一个属性对象
B、一个线程对应一个属性对象
C、属性对象不能整体操作,只能操作各个属性
D、若属性对象初始化时,空间是动态分配的,那么在销毁前需要先将其空间释放才能继续销毁

11、以下关于线程私有数据的说法,错误的是( )?
A、线程的ID号是线程的私有数据
B、线程的私有数据采用“一键多值”的访问方式
C、线程私有数据保证同一线程的多个函数都可以访问到
D、一个线程的私有数据不能被同进程的其他线程访问到

12、线程是系统调度的基本单元。

13、同一进程的所有线程共享进程的所有信息,包括堆栈。

14、线程可以分为用户级线程和内核级线程。

15、当进程的某个线程调用pthread_cancel函数取消同进程的指定线程时,指定线程不一定会被取消。

16、可以通过两个线程ID是否相当来判断这两个线程是否是同一个线程。

17、线程ID只在它所属的进程环境中有效。

18、调用pthread_create函数创建线程时,通过函数参数arg传给启动例程的执行参数只能有一个,传递多个参数将会出错。

19、编写Linux下的多线程程序时,编译需要用到-thread选项。

单元作业7

1、多线程与多进程相比有哪些优势?

2、线程有哪些结束方式?请简单说明?

3、编写一个程序,在主线程中创建一个新线程,在主线程中得到新线程的各个属性,并在主线程中将这些属性输出显示。

4、编写一个多线程程序,计算4*10矩阵中所有元素的和并输出。

第八章 线程间的同步机制

单元测试8

1、以下不属于线程同步机制的是( )。
A、条件变量
B、互斥锁
C、读写锁
D、正则表达式

2、( )函数用来初始化一个互斥锁。
A、pthread_mutex_init
B、pthread_mutex_create
C、pthread_mutex_begin
D、pthread_mutex_lock

3、以下关于互斥锁的描述,错误的是( )。
A、互斥锁也是一种信号量
B、互斥锁的操作具有原子性
C、互斥锁可以用来锁定资源或进程
D、若线程申请的互斥锁正被其他线程占用,则该线程将被挂起

4、以下关于读写锁的说法错误的是( )。
A、读写锁是一种特殊的互斥锁
B、读写锁分为为读锁定和为写锁定
C、同一时间段只能有一个进程为读锁定竞争资源
D、同一时间段只能有一个进程为写锁定竞争资源

5、以下关于条件变量的说法,错误的是( )。
A、条件变量用于在一定条件下阻塞或唤醒线程
B、条件变量通常需要与互斥量配合使用
C、使用条件变量需要用pthread_cond_init函数初始化
D、动态创建的条件变量不再使用时,需要用pthread_cond_destroy函数销毁

6、以下关于线程同步说法错误的是( )。
A、互斥量可以用于确保线程只能互斥的访问竞争资源
B、条件变量本身就是一种竞争资源
C、条件变量提供了一种线程同步的机制
D、互斥量和条件变量结合使用就不会导致系统死锁

7、以下关于线程同步正确的说法是( )。
A、多个线程修改同一共享变量时,需要由控制线程确定访问的先后顺序
B、线程同步只需要应用在用户态线程中即可
C、线程同步的各种机制和进程同步的机制是相同的
D、线程同步也可已使用信号量和信号

8、pthread_cond_wait函数的作用是
A、等待参数指定的互斥量可用
B、等待参数指定的线程结束
C、等待参数指定的条件变量发出信号
D、等待参数指定的竞争资源可用

9、以下关于读写锁,正确的说法是( )。
A、使用读写锁的多线程比使用互斥量的多线程并行度更高
B、读写锁分为读模式加锁和写模式加锁两种状态
C、对已锁定的读写锁加锁会出错
D、读写锁可以同时被多个线程占有

10、以下函数中,( )是用于控制条件变量的。
A、pthread_rwlock_rdlock
B、pthread_cond_signal
C、pthread_mutex_timedlock
D、pthread_spin_init

11、以下( )步骤是正确的。 ①对互斥量加锁 ②改变互斥量保护的条件 ③给等待条件的线程发信号 ④对互斥量解锁
A、①②③④
B、②③①④
C、①②④③
D、③④①②

12、可以为互斥锁设置一个属性对象。

13、线程为了使用资源而申请互斥锁时,若互斥锁被占用,线程只能将自己挂起。

14、多个线程申请同一个互斥锁有可能导致系统死锁。

15、条件变量需要和一个互斥量联系起来。

16、被初始化的互斥量或条件变量必须使用pthread_mutex_destroy或pthread_cond_destroy函数销毁。

单元作业8

1、请简述怎样使用读写锁来同步多个线程对互斥资源的访问。

2、说明在使用条件变量时,互斥锁、条件变量分别起了什么作用。

3、编写一个带同步互斥机制的多线程程序,该程序用来计算一个4*10矩阵中所有元素的和并输出结果。

4、编写一个包含2个线程的程序,在主线程中接收键盘输入,并将输入的字符放入缓冲区中,缓冲区满后,由另一个线程输出缓冲区的内容,用互斥锁实现二者之间的同步。

第九章 网络编程

单元测试9

1、OSI参考模型共( )层,TCP/IP协议参考模型共( )层。
A、7 7
B、7 4
C、4 7
D、4 4

2、下列协议中,不属于应用层的是( )。
A、HTTP
B、UDP
C、DNS
D、FTP

3、只用于同一主机内部进程间通信的socket可使用的协议族是( )。
A、AF_INET
B、AF_UNIX
C、AF_NS
D、AF_IMPLNK

4、以下关于socket的说法,错误的是( )。
A、是一种文件描述符
B、仅限使用于TCP/IP协议
C、是一个编程接口
D、可用于一台主机内部不同进程间的通信

5、Linux环境C编程时,创建套接字的函数是( )。
A、listen
B、accept
C、socket
D、connect

6、Linux环境C编程时,用于请求链接的函数是( )。
A、accept
B、bind
C、recv
D、connect

7、在Linux环境下设计基于UDP服务的通信程序,其服务器端程序的流程大致为( )。 ①建立socket ②将地址绑定套接字 ③监听端口 ④响应客户端请求 ⑤发送或接收客户端数据 ⑥关闭socket
A、①、②、③、④、⑤、⑥
B、①、②、③、⑤、⑥
C、①、②、④、⑤、⑥
D、①、②、⑤、⑥

8、以下不属于TCP/IP模型的层是( )。
A、应用层
B、传输层
C、网络层
D、物理层

9、以下关于listen函数的描述,正确的是( )。
A、listen函数可用于建立TCP服务或UDP服务
B、listen函数可以接收到来自于客户端的连接请求,并建立连接
C、调用listen函数后,未连接的套接字从CLOSED状态转为LISTEN状态
D、listen函数在网络程序中的作用也可以由accept函数实现

10、以下关于bind函数的说法,错误的是( )。
A、bind函数用于将一个socket和指定地址绑定
B、bind函数的地址参数既可以是IPv4地址也可以是IPv6地址
C、bind函数用于TCP服务时,每次调用只能指定端口或IP地址,无法同时指定二者
D、使用bind函数时,需要说明所使用的协议

11、以下( )协议是socket函数不能使用的。
A、TCP协议
B、UDP协议
C、TIPC协议
D、IP协议

12、socket编程中,可靠的面向连接服务的套接字称为SOCK_STREAM。

13、socket编程中,面向无连接服务,数据通过相互独立的报文进行传输的套接字称为SOCK_STREAM。

14、UDP属于网络层协议。

15、通常计算机采用小端模式存储数据,而网络采用大端传输,因此在使用socket传输数据时,需要进行统一的转换。

16、socket函数建立的套接字只能用于TCP或UDP连接。

单元作业9

1、简述TCP/IP模型中各层的主要功能,各有哪些主要协议。

2、简述基于TCP传输的程序设计和基于UDP传输的程序设计中,服务器端程序和客户端程序的大致流程。

3、编写一个基于TCP的服务器端程序,使服务器能够等待客户端的连接请求,一旦有客户端连接,服务器显示出客户端的IP地址和端口,并向服务器发送欢迎信息。

4、编写一个基于UDP的简单聊天程序,聊天双方可以向对方发送信息,也可以接收并显示对方发来的信息。

期末考试

期末考试——客观题

1、在给定文件中查找与设定条件相符字符串的命令为( )。
A、grep
B、gzip
C、find
D、sort

2、为了将当前目录下的压缩归档文件myftp.tar.gz解压缩,可以使用命令( )。
A、tar -xvzf myftp.tar.gz
B、tar -xvf myftp.tar.gz
C、tar -xvz myftp.tar.gz
D、tar -vzf myftp.tar.gz

3、在shell环境中,移动文件使用的命令是( )。
A、mv
B、cp
C、ls
D、rm

4、Linux/UINX系统中top命令的作用是( )。
A、动态监视系统任务
B、显示系统瞬间的进程信息
C、对标准输出排序
D、向进程发送信号

5、任何时候用户需要回到上一级目录,可以使用命令( )。
A、cd ..
B、cd .
C、cd /
D、cd ~

6、/root目录是( )。
A、超级用户的个人主目录
B、系统的根目录
C、动态连接库存放目录
D、系统管理程序存放目录

7、文件file1的访问权限为744,现要取消该文件的文件所有者的执行权限,同时增加该文件的同组用户的写权限,可以使用命令( )。
A、chmod u-x, g+w file1
B、chmod u+x, g+w file1
C、chmod 777 file1
D、chmod g+w file1

8、符号( )加在命令后面可以在后台执行程序。
A、&
B、#
C、@
D、*

9、对所有用户的变量设置,应当放在哪个文件下?
A、/etc/profile
B、/etc/bashrc
C、/etc/skel/.bashrc
D、~/.bash_profile

10、系统调用是( )。
A、提供编程人员的接口
B、一条机器指令
C、中断子程序
D、用户子程序

11、一个类Unix操作系统具有可移植性,是指它需遵循( )。
A、POSIX
B、API
C、ABI
D、ASCII

12、gcc命令可以启动C编译系统。当执行gcc命令时,它可以完成( )步骤 。
A、预处理、编译、汇编和链接
B、预处理、编译
C、编译、汇编和链接
D、预处理、编译、和链接

13、用ls –al 命令列出下面的文件列表,( )文件是符号连接文件。
A、lrwxr--r-- 1 helusers 2024 Sep 12 08:12 cheng
B、srw-rw-rw- 2 hel-susers 56 Sep 09 11:05 hello
C、-rwxrwxrwx 2 hel-susers 56 Sep 09 11:05 goodbey
D、drwxr--r-- 1 helusers 1024 Sep 10 08:10 zhang

14、在默认状态下,对应文件不是系统标准I/O设备的文件描述符是( )。
A、0
B、1
C、2
D、3

15、若Linux系统中的一个普通文件访问权限为:属主允许读、写、执行,组用户允许读,其他用户无权限访问,则其权限显示为( )。
A、-rwxr-----
B、s---r--rwx
C、----r—rwx
D、drwxr-----

16、以下不属于特殊权限位的是( )。
A、stat
B、sticky
C、suid
D、sgid

17、在ext2文件系统中,不包含以下( )类型的块。
A、校验块
B、超级块
C、inode表
D、数据块

18、UNIX/Linux系统中标准错误的文件描述符值为
A、0
B、1
C、2
D、3

19、调用lseek函数时,设置第三个参数为SEEK_END,以下哪种说法是正确的?
A、设置文件的当前位置时以文件尾作为基准值
B、设置文件的当前位置时以文件头作为基准值
C、设置文件的当前位置时以当前的文件偏移量作为基准值
D、设置文件的当前位置时以文件长度作为基准值

20、当进程试图写入某个文件时,Linux内核判断该进程是否具有写权限是依据( )。
A、进程的有效用户ID
B、进程ID
C、进程的父进程ID
D、进程的真实用户ID

21、进程通过fopen()打开的每一个文件,Linux内核都会为其创建一个( )数据结构,进程所有打开文件的这个结构由fd_array[]数组指向,内核通过文件描述符引用fd_array[]数组下标,从而访问这个结构。
A、file{ }
B、task_struct{ }
C、fd
D、FCB

22、遵循( )标准的fread操作使用了带用户缓冲区的读文件操作,用户程序数据区对磁盘数据读前,需经过系统管理的用户缓冲区进行缓冲,从而减少了读磁盘的I/O总次数。
A、ANSI
B、GUN
C、POSIX
D、GPL

23、( )函数可以对已打开的文件描述符进行各种控制操作以改变已打开文件的各种属性。
A、fcntl
B、chmod
C、chown
D、umask

24、( )函数是将内存中的数据写入文件中。
A、write
B、open
C、read
D、carete

25、关于如下命令和其结果,不正确的叙述是?( ) root@ubuntu:~# ls / -ail 2 drwxr-xr-x 23 root root 4096 3月 24 16:07 . 2 drwxr-xr-x 23 root root 4096 3月 24 16:07 .. 3407873 drwxr-xr-x 2 root root 4096 10月 28 2015 bin
A、当前目录是不是根目录
B、bin是目录
C、3407873 是bin的inode结点编号
D、bin目录的所有者是root、用户所属组是root

26、下列关于链接的描述,错误的是( )。
A、硬链接和符号链接都会产生一个新的inode结点
B、硬链接就是让链接文件的inode编号指向被链接文件的inode编号
C、链接分为硬链接和软件链接
D、硬链接不能链接目录文件

27、Linux使用root账户的shadow文件存放用户账户密码,只有root账户才可以读写shadow,普通用户如何通过执行passwd命令修改个人的账户密码。( )
A、修改passwd命令的权限为:rwsr-xr-x
B、修改passwd命令的权限为:rws--s--x
C、修改shadow文件的权限为:rw-r--r-s
D、修改shadow文件的权限为:rwsr-xr-x

28、以下哪种状态不是进程所拥有的状态。
A、生存态
B、运行态
C、就绪态
D、阻塞态

29、( )是操作系统中最重要、最基本的概念之一,它是系统分配资源的基本单位,是一个具有独立功能的程序段对某个数据集的一次执行活动。
A、进程
B、程序
C、作业
D、线程

30、在Linux操作系统中,运行态和就绪态进程的状态被统一为( )。
A、TASK_RUNNING
B、TASK_INTERRUPTIBLE
C、TASK_READY
D、TASK_ZOMBIE

31、对以下程序运行成功时描述正确的是( )。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> main() { pid_t pid; if((pid=fork())==-1) { perror(“fork”); exit(EXIT_FAILURE); } printf(“hello\n”); return 0; }
A、父子进程各输出一个hello
B、父进程先输出一个hello,子进程再输出一个hello
C、只有子进程输出一个hello
D、只有父进程输出一个hello

32、eXec族函数中,只有( )是系统调用,其他五个都是库函数。
A、execve
B、execvp
C、execlp
D、execv

33、以下( )不是waitpid与wait函数的不同之处。
A、waitpid可以带回子进程结束的状态
B、waitpid可等待一个特定的子进程
C、waitpid可以不阻塞调用进程
D、waitpid支持作业控制

34、以下哪种方式会导致进程的异常退出。
A、被接收到的信号终止
B、进程中调用了exit函数
C、遇到main函数中的return语句
D、进程中调用了_exit函数

35、以下函数会在被调用时刷新进程所打开的流对象的是( )。
A、exit
B、on_exit
C、atexit
D、_exit

36、setsid函数用来设置进程的____。
A、会话号
B、进程组号
C、进程号
D、父进程号

37、Linux系统中大多数的软件服务器属于( )。
A、守护进程
B、僵尸进程
C、孤儿进程
D、内核进程

38、task_struct结构体用来保存( )。
A、进程的PCB
B、会话的环境
C、文件的基本信息
D、任务的基本信息

39、下列eXec函数中调用者可以通过数组指定命令行参数并通过相对路径查找可执行文件的函数是________。
A、execvp
B、execl
C、execve
D、execlp

40、调用fork函数后该函数返回值为0,说明出现以下何种情况?
A、当前代码运行在子进程中
B、创建子进程出错
C、当前代码运行在父进程中
D、当前代码运行在主线程中

41、调用fork函数后下列哪一种不属于父子进程之间共享的内容?
A、进程ID
B、父进程已打开的文件描述符
C、父进程的正文段
D、环境变量

42、下面哪个函数既可以指定所等待子进程的ID又可以请求内核返回子进程使用的资源情况汇总?
A、waitpid
B、wait
C、wait3
D、wait4

43、下列何种情况下会出现不同进程共享相同文件表的情况?
A、打开文件的进程创建子进程
B、不同进程分别打开同一文件
C、不同进程分别打开不同文件
D、父子进程分别打开同一文件

44、下列关于进程和程序的描述中哪一项是不正确的?
A、程序只能在前台运行,而进程可以在前台或后台运行
B、程序是一组有序的静态指令,进程是程序在某个数据集上的执行
C、程序可以长期保存在存储介质中,而进程是有生命周期的
D、进程和程序并不是一一对应的关系

45、重定向是由( )实现的。
A、Shell
B、用户程序
C、命令
D、内核

46、在实现man -k directory | grep read命令时,使用的是( )。
A、管道
B、共享内存
C、消息队列
D、信号量

47、命令cat file>>file2将会( )。
A、将file1的内容添加到file2已有内容之后
B、将file2的内容复制给file1
C、将file1的内容复制给file2
D、将file1的内容插入到file2已有内容之前

48、将标准输出重定向到文件描述符为6对应的文件上,对应的c程序语句为______。
A、dup2(6,1);
B、6=dup(1);
C、dup(6);
D、dup2(1,6);

49、以下关于管道的描述错误的是( )。
A、使用pipe函数时,得到的文件描述符数组中,下标为0的是管道的写端
B、匿名管道只能以单工的方式通信
C、如果管道中无数据,则读进程将被挂起直到数据被写进管道
D、如果所有写进程都关闭了管道的写端时,read返回0,意味着文件的结束

50、下面对管道的描述中哪一个是不正确的( )。
A、管道存在于用户空间中
B、父子进程间可以使用
C、对管道的访问无需再考虑互斥问题
D、管道是一种特殊文件

51、管道的读写操作是以( )的方式进行的。
A、队列
B、二叉树
C、栈
D、哈希表

52、下列有关管道的说法错误的是( )。
A、读写管道的操作都是原子性的
B、读操作和写操作分别在管道的两端进行
C、若写入管道的数据字节数大于管道的剩余空间,则返回错误以提示稍后再写
D、命名管道与匿名管道的读写操作都遵循先进先出原则

53、创建命名管道除了使用mkfifo函数外,还可以使用( )函数。
A、mknod
B、pipe
C、mkdir
D、touch

54、以下命令可以将标准错误重定向的是( )。
A、ls -l /home &>err.txt
B、ls -l /home 2<err.txt
C、ls -l /home 1>err.txt
D、ls -l /home 3>err.txt

55、以下哪一种情况不会产生信号。
A、从信号处理函数退出时
B、进程执行出错时
C、用户通过终端输入Ctrl+c等产生信号的字符
D、一个进程调用kill向另一个进程发送信号

56、以下哪种信号处理方式不需要提前安装信号处理函数。
A、按默认方式处理
B、捕捉信号
C、忽略信号
D、三种方式都需要

57、向指定进程发送一个信号可使用函数( )。
A、kill
B、alarm
C、pause
D、raise

58、以下信号不能被忽略的是( )。
A、SIGSTOP
B、SIGHUP
C、SIGINT
D、SIGQUIT

59、kill(pid,signum)函数中,当参数pid为0时表示( )。
A、向与调用kill函数的进程同组的进程发送signum信号
B、向进程号为0的进程发送signum信号
C、向所有进程发送signum信号
D、错误,参数pid不能为0

60、以下哪个函数无法产生信号?
A、pause
B、kill
C、raise
D、alarm

61、以下关于捕捉信号的说法错误的是( )。
A、sigaction函数无法获取指定信号当前的处理函数
B、可以使用signal函数安装信号处理函数
C、可以使用sigaction函数安装信号处理函数
D、signal函数无法获取指定信号当前的处理函数

62、以下关于屏蔽信号的说法正确的是( )。
A、通常是设置一个需要屏蔽的信号集
B、只能在安装信号时设置需要屏蔽的信号
C、信号一旦被屏蔽就无法取消屏蔽
D、不可以屏蔽单个信号

63、以下不属于伪信号处理函数的是( )。
A、SIGINT
B、SIG_IGN
C、SIG_DFL
D、SIG_ERR

64、以下关于信号机制描述错误的是( )。
A、使用信号必须安装信号处理函数
B、信号是一种异步通信机制
C、信号是内核产生的
D、进程对于接收到信号这一事件是不可预知的

65、以下进程间通信方式属于异步通信方式的是( )。
A、信号
B、管道
C、共享内存
D、消息队列

66、下面对进程间通信的共享内存机制的描述中哪一个是不正确的?
A、对共享内存的访问无需再考虑互斥问题
B、是最快的进程间通信机制
C、共享内存是共享资源
D、每个进程可以在自己的地址空间中访问同一段共享内存

67、可以使用命令( )获取当前系统中所有IPC资源的状态。
A、ipcs
B、kill
C、get
D、ftok

68、以下通信机制属于 SYSTEM V IPC机制的是( )。
A、信号量
B、信号
C、套接字
D、管道

69、客户端使用服务器创建的共享内存可使用函数( )。
A、shmget
B、shmint
C、shmat
D、shmdt

70、以下不属于SYSTEM V IPC的通信机制是( )。
A、信号
B、信号量
C、共享内存
D、消息队列

71、以下关于通信机制的描述错误的是( )。
A、每次对消息队列进程读操作时,会返回队列的第一个消息
B、套接字可用于不在同一台主机的两个进程通信
C、信号量可以用于实现多进程间的同步与互斥
D、共享内存适用于在进程间传输大量的数据

72、( )不是进程通信的目的。
A、预防死锁
B、传输数据
C、发送控制信号
D、协调同步或互斥

73、以下关于IPC对象的描述正确的是( )。
A、创建IPC对象时,需要约定一个键值,保证通信的多个进程会合在同一个IPC对象上
B、通信的多个进程可分别使用宏IPC_PRIVATE创建IPC对象并使用该对象通信
C、使用IPC对象的键值也可以操作IPC对象
D、使用IPC对象通信时,必须在通信的每一个进程中使用相同的键值创建IPC对象,才能实现通信

74、以下关于Linux信号量的描述错误的是( )。
A、信号量的初值通常为0
B、信号量通常作为其他通信机制的辅助手段
C、信号量通常以集合的形式出现
D、在semop操作中设置SEM_UNDO标识,可由内核来维护信号量的数值

75、在POSIX中,创建线程使用( )函数。
A、pthread_create
B、create_thread
C、create
D、create_pthread

76、以下哪一项不是线程与进程对比的优点?
A、线程拥有更灵活的调度策略
B、创建线程花费的时间少
C、线程间切换的速度快
D、线程间通信更加方便省时

77、线程使用以下哪种方式退出时,无法保证不结束整个进程?
A、线程执行eXec函数后,导致当前进程地址空间全部更新
B、从启动例程中返回
C、被统一进程的其他线程取消
D、调用pthread_exit

78、以下叙述正确的是( )。
A、操作系统可以感知到内核级线程,无法感知到用户级线程
B、用户级线程的创建、调度和撤销也需要内核支持
C、内核级线程的程序实体只能运行在内核态
D、用户级线程在执行系统调用时不会导致所属进程被中断

79、以下说法正确的是( )。
A、只有用户级线程的操作系统中,调度以进程为单位,由用户程序控制进程中的多个线程运行。
B、只有用户级线程的操作系统中,调度以进程为单位,由操作系统控制进程中的多个线程运行。
C、只有用户级线程的操作系统中,调度以线程为单位,由用户程序控制进程中的多个线程运行。
D、只有用户级线程的操作系统中,调度以线程为单位,由操作系统控制进程中的多个线程运行。

80、以下不属于线程私有资源的是( )。
A、文件描述符表
B、线程号
C、调度优先级和策略
D、信号屏蔽字

81、调用pthread_create函数创建一个线程后,( )会先运行。
A、创建的新线程或调用pthread_create函数的线程
B、创建的新线程
C、调用pthread_create函数的线程
D、该进程的主线程

82、以下哪种情况不会导致线程被取消?
A、线程处于CANCELED状态,且线程收到了取消信号
B、线程处于CANCELED状态,且线程调用了pthread_testcancel函数
C、处于CANCELED状态的线程收到了取消信号,且运行到了取消点
D、处于CANCELED状态的线程收到了取消信号,且取消类型为同步

83、以下关于线程清理函数的说法,错误的是( )。
A、线程从其代码中的return语句结束时,会引发pthread_cleanup_push和pthread_cleanup_pop函数执行
B、pthread_cleanup_push和pthread_cleanup_pop函数必须成对使用
C、pthread_cleanup_push和pthread_cleanup_pop函数都是以宏的形式实现的
D、线程从其代码中的pthread_exit函数结束时,会引发pthread_cleanup_push和pthread_cleanup_pop函数执行

84、以下关于线程属性的说法,正确的是( )?
A、一个线程对应一个属性对象
B、线程的每个属性对应一个属性对象
C、属性对象不能整体操作,只能操作各个属性
D、若属性对象初始化时,空间是动态分配的,那么在销毁前需要先将其空间释放才能继续销毁

85、以下关于线程私有数据的说法,错误的是( )?
A、线程的ID号是线程的私有数据
B、线程的私有数据采用“一键多值”的访问方式
C、线程私有数据保证同一线程的多个函数都可以访问到
D、一个线程的私有数据不能被同进程的其他线程访问到

86、以下不属于线程同步机制的是( )。
A、正则表达式
B、条件变量
C、互斥锁
D、读写锁

87、( )函数用来初始化一个互斥锁。
A、pthread_mutex_init
B、pthread_mutex_create
C、pthread_mutex_begin
D、pthread_mutex_lock

88、以下关于互斥锁的描述,错误的是( )。
A、若线程申请的互斥锁正被其他线程占用,则该线程将被挂起
B、互斥锁也是一种信号量
C、互斥锁的操作具有原子性
D、互斥锁可以用来锁定资源或进程

89、以下关于读写锁的说法错误的是( )。
A、同一时间段只能有一个进程为读锁定竞争资源
B、读写锁是一种特殊的互斥锁
C、读写锁分为为读锁定和为写锁定
D、同一时间段只能有一个进程为写锁定竞争资源

90、以下关于条件变量的说法,错误的是( )。
A、使用条件变量需要用pthread_cond_init函数初始化
B、条件变量用于在一定条件下阻塞或唤醒线程
C、条件变量通常需要与互斥量配合使用
D、动态创建的条件变量不再使用时,需要用pthread_cond_destroy函数销毁

91、以下关于线程同步说法错误的是( )。
A、互斥量和条件变量结合使用就不会导致系统死锁
B、互斥量可以用于确保线程只能互斥的访问竞争资源
C、条件变量本身就是一种竞争资源
D、条件变量提供了一种线程同步的机制

92、以下关于线程同步正确的说法是( )。
A、线程同步也可已使用信号量和信号
B、多个线程修改同一共享变量时,需要由控制线程确定访问的先后顺序
C、线程同步只需要应用在用户态线程中即可
D、线程同步的各种机制和进程同步的机制是相同的

93、pthread_cond_wait函数的作用是( )。
A、等待参数指定的条件变量发出信号
B、等待参数指定的互斥量可用
C、等待参数指定的线程结束
D、等待参数指定的竞争资源可用

94、以下关于读写锁,正确的说法是( )。
A、使用读写锁的多线程比使用互斥量的多线程并行度更高
B、读写锁分为读模式加锁和写模式加锁两种状态
C、对已锁定的读写锁加锁会出错
D、读写锁可以同时被多个线程占有

95、以下函数中,( )是用于控制条件变量的。
A、pthread_mutex_timedlock
B、pthread_rwlock_rdlock
C、pthread_cond_signal
D、pthread_spin_init

96、以下( )步骤是正确的。 ①对互斥量加锁 ②改变互斥量保护的条件 ③给等待条件的线程发信号 ④对互斥量解锁
A、①②④③
B、①②③④
C、②③①④
D、③④①②

97、OSI参考模型共( )层,TCP/IP协议参考模型共( )层。
A、7 4
B、7 7
C、4 7
D、4 4

98、下列协议中,不属于应用层的是( )。
A、UDP
B、HTTP
C、DNS
D、FTP

99、只用于同一主机内部进程间通信的socket可使用的协议族是( )。
A、AF_INET
B、AF_UNIX
C、AF_NS
D、AF_IMPLNK

100、以下关于socket的说法,错误的是( )。
A、仅限使用于TCP/IP协议
B、是一种文件描述符
C、是一个编程接口
D、可用于一台主机内部不同进程间的通信

101、Linux环境C编程时,创建套接字的函数是( )。
A、socket
B、listen
C、accept
D、connect

102、Linux环境C编程时,用于请求链接的函数是( )。
A、connect
B、accept
C、bind
D、recv

103、在Linux环境下设计基于UDP服务的通信程序,其服务器端程序的流程大致为( )。 ①建立socket ②将地址绑定套接字 ③监听端口 ④响应客户端请求 ⑤发送或接收客户端数据 ⑥关闭socket
A、①、②、⑤、⑥
B、①、②、③、④、⑤、⑥
C、①、②、③、⑤、⑥
D、①、②、④、⑤、⑥

104、以下不属于TCP/IP模型的层是( )。
A、物理层
B、应用层
C、传输层
D、网络层

105、以下关于listen函数的描述,正确的是( )。
A、调用listen函数后,未连接的套接字从CLOSED状态转为LISTEN状态
B、listen函数可用于建立TCP服务或UDP服务
C、listen函数可以接收到来自于客户端的连接请求,并建立连接
D、listen函数在网络程序中的作用也可以由accept函数实现

106、以下关于bind函数的说法,错误的是( )。
A、bind函数用于TCP服务时,每次调用只能指定端口或IP地址,无法同时指定二者
B、bind函数用于将一个socket和指定地址绑定
C、bind函数的地址参数既可以是IPv4地址也可以是IPv6地址
D、使用bind函数时,需要说明所使用的协议

107、以下( )协议是socket函数不能使用的。
A、IP协议
B、TCP协议
C、UDP协议
D、TIPC协议

108、glibc是GUN发布的libc库,即c运行库。glibc是Linux系统中最底层的API,几乎其它任何运行库都会依赖于glibc。

109、GNU C库是Linux内核系统调用接口的封装,其中包括POSIX兼容应用函数调用。

110、GNU是GNU Is Not Unix的递归缩写,是自由软件基金会的一个项目。

111

中国大学Linux编程技术_2

在第一篇文章中,我们介绍了一些基础的Linux编程知识,包括进程、线程、信号和文件系统等。在本篇文章中,我们将继续深入探讨Linux编程的一些高级技术,包括网络编程、多线程编程和进程间通信等。

1. 网络编程

网络编程是Linux编程中不可或缺的一部分,它允许我们在不同的计算机之间进行通信。在Linux中,我们可以使用一些套接字(socket)API来进行网络编程。下面是一个简单的例子:

  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  int main() {
    int sockfd, newsockfd, portno, clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    int n;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
      error(\ERROR opening socket\
    bzero((char *) &serv_addr, sizeof(serv_addr));
    portno = 5001;
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);
    if (bind(sockfd, (struct sockaddr *) &serv_addr,
      sizeof(serv_addr)) < 0)
      error(\ERROR on binding\
    listen(sockfd,5);
    clilen = sizeof(cli_addr);
    newsockfd = accept(sockfd,
      (struct sockaddr *) &cli_addr, &clilen);
    if (newsockfd < 0)
      error(\ERROR on accept\
    bzero(buffer,256);
    n = read(newsockfd,buffer,255);
    if (n < 0) error(\ERROR reading from socket\
    printf(\Here is the message: %s\\buffer);
    n = write(newsockfd,\I got your message\18);
    if (n < 0) error(\ERROR writing to socket\
    return 0;
  }

这个例子中展示了如何使用socket API来建立一个基于TCP协议的服务器。我们通过调用socket()函数来创建一个sockfd套接字,再使用bind()函数来绑定一个端口。接下来,我们使用listen()函数来监听端口,当客户端连接到该端口时,accept()函数会返回一个新的套接字newsockfd,我们可以通过它来进行通信。

2. 多线程编程

多线程编程是一种利用计算机硬件并行性提高程序性能的技术。在C语言中,我们可以使用pthread库来进行多线程编程。下面是一个简单的例子:

  #include <stdio.h>
  #include <stdlib.h>
  #include <pthread.h>
  void *PrintHello(void *threadid) {
    long tid;
    tid = (long)threadid;
    printf(\Hello World! It's me, thread #%ld!\\n\ tid);
    pthread_exit(NULL);
  }
  int main () {
    pthread_t threads[5];
    int rc;
    long t;
    for(t=0; t<5; t++) {
      printf(\In main: creating thread %ld\\ t);
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
      if (rc) {
        printf(\ERROR; return code from pthread_create() is %d\\ rc);
        exit(-1);
      }
    }
    pthread_exit(NULL);
  }

这个例子中展示了如何使用pthread库来创建5个线程,并将它们分别命名为0到4。我们使用pthread_create()函数来创建线程,并指定PrintHello函数作为线程的入口点。在PrintHello函数中,我们将打印出线程的编号,并使用pthread_exit()函数来结束线程运行。

3. 进程间通信

进程间通信是指两个或多个进程之间进行数据交换或互相协调的过程。在Linux中,我们可以使用一些IPC(Inter-Process Communication)机制来实现进程间通信。下面是一个简单的例子:

  #include <stdio.h>
  #include <stdlib.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <sys/ipc.h>
  #include <sys/shm.h>
  int main() {
    int shmid;
    key_t key;
    char *shm, *s;
    key = 5678;
    shmid = shmget(key, 27, IPC_CREAT | 0666);
    if (shmid < 0)
      error(\shmget\
    shm = shmat(shmid, NULL, 0);
    if (shm == (char *) -1)
      error(\shmat\
    memcpy(shm, \Hello World\ 11);
    shm += 11;
    *shm = 0;
    printf(\s\\shm);
    return 0;
  }

这个例子中展示了如何使用共享内存来实现进程间通信。我们使用shmget()函数来获取一个共享内存的ID,然后使用shmat()函数来映射该共享内存到进程的地址空间中。接下来,我们可以使用memcpy()函数来将数据写入共享内存中,然后使用printf()函数来读取共享内存中的数据。

4. 总结

本篇文章介绍了Linux编程的一些高级技术,包括网络编程、多线程编程和进程间通信等。这些技术在实际开发中非常有用,可以提高程序的性能和可靠性。同时,我们也需要注意这些技术的安全性和可维护性,避免出现一些不必要的错误和漏洞。