嵌入式题库1

更新时间:2023-03-11 18:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单项选择题

1下列哪一项不是嵌入式操作系统的特点 D A、占有资源少 B、低成本 C、高可靠性 D、交互性 √

2下列哪一项不是嵌入式系统的基本要素 C A、嵌入性 B、专用性 C、通用性 √ D、计算机系统

3现阶段嵌入式系统发展的主要标志为 D A、以单芯片为核心的可编程控制器

B、以嵌入式CPU为基础、以简单操作系统为核心 C、嵌入式操作系统 D、Internet √

4下面哪项不是嵌入式系统的特点 D A、面向特定应用

B、软件一般都固化在存储器芯片或单片机本身中,而不存储于磁盘中 C、代码尤其要求高质量、高可靠性 D、具备二次开发能力 √

5下面哪项不是ARM处理器的特点 D

A、支持Thumb(16 位)/ARM(32 位)双指令集 B、兼容8位/16位器件 C、指令长度固定

D、大量使用RAM,指令执行速度更快 √

6下面哪项不是ARM处理器的特点 B A、大多数数据操作都在寄存器中完成 B、采用CISC指令集 √

C、寻址方式灵活简单,执行效率高 D、体积小、低功耗、低成本、高性能

下面哪项不属于ARM处理器模式 A A、管理模式(root) √ B、用户模式(usr) C、快速中断模式(fiq) D、外部中断模式(irq)

下面哪项为错误的说法 A

A、冯·诺依曼结构共用数据存储空间和程序存储空间,不共享存储器总线 √ B、哈佛结构有分离的数据和程序空间及分离的访问总线 C、哈佛结构在指令执行时,取址和取数可以进行并行操作 D、哈佛结构指令执行时效率更高

采用下列哪项更有利于开发微型嵌入式应用系统 B A、脚本程序语言 B、C语言或汇编语言 √ C、C++或SQL语言 D、HTML或XML语言

下面哪项为一般嵌入式系统开发中不具备的环节 B A、系统总体开发 B、数据库设计 √ C、嵌入式硬件开发 D、嵌入式软件开发

在嵌入式系统开发过程中下面哪项为错误的说法 B

A、对于有些硬件和软件都可以实现的功能,需要在成本和性能上做出抉择 B、对实时性要求非常高的产品可以选择嵌入式Linux开发环境 √ C、嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分 D、嵌入式系统的软件开发可分为交叉编译和交叉调试两部分

对于Linux操作系统,下面哪项说法是错误的 D A、是一种开源的操作系统 B、提供了强大的应用程序开发环境 C、可以免费使用

D、不支持Sparc硬件平台 √

使用命令chmod的数字设置,可以改变 C A、文件的访问特权 B、目录的访问特权

C、文件/目录的访问特权 √

修改文件a.txt的权限,使每个用户都可以读取和写入这个文件,相应命令为 A A、chmod 666 a.txt √ B、chmod 777 a.txt C、chmod 755 a.txt D、chmod 555 a.txt

某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为 D A、467 B、674

C、476 D、764 √

系统中有用户user1和user2,同属于users组。在user1用户目录下有一文件file1,它拥有644的权限,如果user2用户想修改user1用户目录下的file1文件,应文件拥有权限应为 B A、744 B、664 √ C、646 D、746

某文件的权限是 -rwxr--r--,则下面描述正确的是 C A、文件的权限值是755

B、文件的所有者对文件只有读权限 C、其他用户对文件只有读权限 √ D、同组用户对文件只有写权限

某文件的原有权限是-rwxr--r--,执行chmod o+x后文件权限为 B A、-rwxr-xr-x B、-rwxr--r-x √ C、-rwxr-xr-- D、-rw-r--r--

clear命令的作用是 A A、清除终端窗口 √ B、关闭终端窗口 C、打开终端窗口 D、调整窗口大小

显示当前目录中的全部文件,相应命令为 B A、ls B、ls -a √ C、ls -l

在Linux操作系统默认情况下,ls命令显示的可执行文件颜色为 A A、绿色 √ B、蓝色 C、灰色 D、黄色

用命令显示出文件ff的描述为-rwxr-xr-- 1 root root 599 cec 10 17:12 ff,由此可知文件ff的类型为 A A、普通文件 √ B、硬链接

C、目录 D、符号链接

用命令列出下面的文件列表,请问那一个文件是符号链接文件 D A、-rw------- 2 hel-s users 56 Sep 09 11:05 hello B、-rw------- 2 hel-s users 56 Sep 09 11:05 goodbey C、drwx------ 1 hel users 1024 Sep 10 08:10 zhang D、lrwx------ 1 hel users 2024 Sep 12 08:12 cheng √

在Linux关机命令中,下列命令中无法实现关机的是 B A、shutdown -h now B、reboot √ C、halt

删除文件命令为 D A、mkdir B、rmdir C、mv D、rm √

对于tar.gz结尾的文件,采用下面哪个命令进行解压缩操作 A A、tar xvzf √ B、tar jxvf C、tar czvf D、tar jcvf

对于tar.bz2结尾的文件,采用下面哪个命令进行解压缩操作 B A、tar xvzf B、tar jxvf √ C、tar czvf D、tar jcvf

对于ln命令,下列哪项说法是不正确的 C A、ln命令会保持每一处链接文件的同步性 B、软链接在用户选定的位置上生成一个文件的镜像 C、ln命令的链接文件不会重复占用磁盘空间 √

D、硬链接会在用户选定的位置上生成一个和源文件大小相同的文件

在vi编辑器中执行存盘退出的命令为 D A、:q B、:sq C、:q! D、:wq √

vi编辑器中不包括下面哪种模式 A A、编辑模式 √ B、命令行模式 C、插入模式 D、底行模式

使用vi编辑器环境时,使用:set nu显示行号,使用下面哪项命令取消行号显示 B A、:set nuoff B、:set nonu √ C、:off nu D、:cls nu 在Linux内核配置过程中,下面哪项命令采用的是基于图形窗口模式的配置界面A、make config B、make menuconfig C、make xconfig √ D、make oldconfig 在Linux内核配置过程中,下面哪项命令建立依赖关系 C A、make config B、make menuconfig C、make dep √ D、make clean 交叉编译器中,下面哪项不是必需包含的 D A、glibc B、gcc C、binutils D、tmake √

内核的编译主要步骤不包括下面哪项 D A、内核配置 B、建立依存关系 C、建立内核 D、加载内核 √ 内核编译时选项前的尖括号中可以是空,*,M,其中*表示 C A、选项将编译为模块 B、不包含选项 C、包含选项 √ Bootloader的stage1阶段主要完成的工作不包括下面哪项 D A、基本的硬件初始化

C

B、为加载stage2准备RAM空间 C、拷贝stage2到RAM中

D、用汇编语言跳转到main入口函数 √

采用哪项运行级别为图形用户登录Linux操作系统 D A、0 B、1 C、3 D、5 √

下面关于Linux系统服务的说法哪项是错误的 B A、INIT进程的一个重要作用就是启动Linux系统服务

B、Linux的系统服务包括独立运行的系统服务和由用户设定的服务 √ C、xinet能够同时监听多个指定的端口 D、xinet可以看作一个启动服务的管理服务器

下面关于Linux系统服务的说法哪项是错误的 C

A、独立运行的系统服务的启动脚本都放在目录/etc/rc.d/init.d/中

B、不同运行级别的脚本文件目录为/etc/rc.d/rcN.d,其中N对应不用的运行级别 C、不同运行级别的脚本文件中每个对应的服务都以“C”或“S”开头,其中的C代表关闭, S代表启动 √

D、使用命令“service+系统服务+操作”实现对相应服务操作

使用下面哪项命令查看系统的默认运行级别 A A、runlevel √ B、service xinetd status C、chkconfig --list D、chkconfig xinetd status

下面哪种语言GCC编译器不支持 C A、C B、Java C、ASP √ D、C++

GCC的正确编译流程为 A A、预处理-编译-汇编-链接 √ B、预处理-编译-链接-汇编 C、预处理-链接-编译-汇编 D、编译-预处理-汇编-链接

下面哪项关于GCC编译过程的说法是错误的 D

A、编译阶段GCC要检查代码规范性、是否有语法错误等,确定代码的实际要做的工作 B、汇编阶段是把编译阶段生成的.s文件转成目标文件

C、预处理阶段,GCC编译器将代码中包含的头文件编译进来 D、GCC在编译时默认使用静态库 √

如需GCC提供编译过程中所有有用的报警信息,则在编译时应加入选项 B A、-w B、-Wall √ C、-werror D、-error

下面哪些与GDB相关的说法是错误的 B A、GDB能调试可执行文件 B、GDB能调试源代码 √ C、GDB对编译过程有要求 D、GDB支持交叉调试

在GDB调试过程中,使用下面哪项命令设置断点,其中m代表行号 A A、b m √ B、c m C、n m D、s m

一个进程启动时打开3个文件中不包括 D

A、标准输入 B、标准输出 C、标准出错处理 D、系统日志服务 √

一般情况下,STDIN_FILENO对应的文件描述符为 B A、-1 B、0 √ C、1 D、2

一般情况下,STDERR_FILENO对应的文件描述符为 D A、-1 B、0 C、1 D、2 √

不带缓存的文件I/O操作函数不包括 A A、fopen √ B、read C、write D、open

open函数原型中的O_RDWR标志表示文件打开方式为 C A、只读方式打开文件 B、可写方式打开文件 C、读写方式打开文件 √

D、以添加方式打开文件,在打开文件的同时,文件指针指向文件末尾

open函数调用错误时,函数返回值为 A A、-1 √ B、0 C、1 D、2

在Linux操作系统中,串口设备的设备名一般为 C A、com1 B、port1 C、ttyS0 √ D、serl1

串口参数主要通过设置struct termios结构体的各成员值来实现,下面哪项不是各成员值支持的设置方式 C A、与 B、或 C、赋值 √

串口参数主要通过设置struct termios结构体的各成员值来实现,下面哪项实现设置波特率参数 B

A、newtio.c_cflag |= 115200

B、cfsetispeed(&newtio, B115200) √ C、options.c_cflag |= B115200 D、newtio.c_cflag = ~CS115200

当流缓冲涉及一个终端时,标准I/O典型地使用下面哪项缓冲方式 B A、全缓冲 B、行缓冲 √ C、无缓冲 D、帧缓冲

标准出错stderr产生时,标准I/O典型地使用下面哪项缓冲方式 C A、全缓冲 B、行缓冲 C、无缓冲 √ D、帧缓冲

使用fopen函数时,必需包含的头文件文件为 A

A、stdio.h √ B、stdlib.h C、errno.h D、fcntl.h

下面哪项是对进程概念的错误描述 D A、进程是一个独立的可调度的活动

B、进程是一个抽象实体,当它执行某个任务时,将要分配和释放各种资源 C、进程是可以并行执行的计算部分

D、进程是保存在磁盘上的指令的有序集合 √

下面哪项对进程的描述是错误的 A A、进程是一个静态态的概念 √

B、进程包括动态创建、调度和消亡的整个过程。 C、进程是程序执行和资源管理的最小单位

D、当用户在系统中键入命令执行一个程序的时候,它将启动一个进程

下面哪项对进程控制块的描述是错误的 D A、进程控制块包含进程的描述信息 B、进程控制块包含进程的控制信息 C、进程控制块包含进程的资源信息 D、进程控制块是进程的一个静态描述

下面哪项对进程标识的描述是错误的 B A、PID惟一地标识一个进程 B、PPID惟一地标识一个进程 C、PID是非零的正整数 D、PPID是非零的正整数

下面哪项对Linux操作系统下进程的模式描述是错误的 C

A、用户程序执行过程中出现系统调用或者发生中断事件,进程模式就变成内核模式 B、内核模式下运行的进程可以执行机器的特权指令 C、root用户可干扰内核模式下进程的运行 D、内核模式下运行的进程不受用户的干扰

进程的三种状态为 C A、准备态、执行态和退出态 B、精确态、模糊态和随机态 C、运行态、就绪态和等待态 D、手工态、自动态和自由态

下面哪项不是Linux操作系统下常见的进程调度命令 C A、bg B、kill

C、open D、ps

下面哪项对Linux操作系统下fork函数的描述是错误的 D A、fork函数执行一次返回两个值

B、新进程称为子进程,而原进程称为父进程 C、父进程返回值为子进程的进程号 D、子进程返回值为父进程的进程号

下面哪项对Linux操作系统下exit( )和_exit( )函数的描述是错误的 C

A、_exit( )函数的作用是直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构

B、exit()函数在调用exit退出系统之前要检查文件的打开情况 C、exit()函数直接将进程关闭,此时缓冲区中的数据将会丢失 D、想保证数据的完整性,就一定要使用exit()函数。

下面哪项对Linux操作系统下wait和waitpid函数的描述是错误的 D

A、wait函数用于使父进程(即调用wait的进程)阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止

B、wait函数调用时,如果该父进程没有子进程或者他的子进程已经结束,则wait就会立即返回。

C、waitpid函数用于使父进程(即调用wait的进程)阻塞,并可提供一个非阻塞版本的wait功能

D、waitpid函数不支持作业控制

编写守护进程的第一步为 A A、创建子进程,父进程退出 B、在子进程中创建新会话 C、改变当前目录为根目录 D、关闭文件描述符

下面哪项对Linux操作系统下setsid函数的描述是错误的 D A、用于创建一个新的会话,并担任该会话组的组长 B、让进程摆脱原会话的控制 C、让进程摆脱原进程组的控制 D、让进程摆脱init进程的控制

TCP/IP协议模型中不包括下面哪项 A A、物理层 B、网络接口层 C、网络层 D、传输层

在关于TCP/UDP的描述中,下面哪项是错误的 C

Linux用户编程接口(API)遵循POSIX标准。 1

系统命令相对API更高一层,它的内部引用用户编程接口(API)来实现相应的功能。 1

标准I/O提供流缓冲的目的是尽可能减少使用read和write调用的数量。 1

标准I/O提供3种类型的缓冲存储类型,包括全缓冲,行缓冲和帧缓冲。 2

并行通信传输速度快,适用于短距离通信,但要求传输速度较高的应用场合。 1

用户常见的数据通信的基本方式可分为网络通信与串行通信两种。 2

串行通信通信线路简单,成本低,适用于远距离通信,但传输速度慢的应用场合。 1

对文件的操作使用文件描述符进行,对设备的操作使用设备描述符进行。 2

Linux中的文件主要分为4种:普通文件、目录文件、链接文件和可执行文件。 2

当一个进程终止时,它所有已打开的文件都由内核自动关闭。 1

文件是Linux操作系统中最常见最基础的操作对象。 1

进程是系统的基本调度单位。 1

进程是一个程序的一次执行的过程。 1

进程通过文件描述符来描述。 2

Linux操作系统中调用函数getpid获得当前进程的PID和PPID。 2

在Linux操作系统中,进程的执行模式划分为用户模式和root模式。 2

Linux操作系统中创建一个新进程的唯一方法是使用fork函数。 1

Linux操作系统中,fork函数用于从已存在进程中创建一个新进程。

使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间。 1

fork函数使用多少次就创建多少个进程。 1

exec函数族就提供了一个在进程中启动另一个程序执行的方法。 1

当程序执行到exit或_exit时,进程会无条件地停止剩下的所有操作,清除包括PCB在

内的各种数据结构,并终止本进程的运行。 1

wait函数是waitpid函数的一个特例,在Linux操作系统内部实现wait函数时直接调用的就是waitpid函数。 1

守护进程,即通常所说的Daemon进程,是Linux操作系统中的后台服务进程。 1

守护进程的生存期较长。 1

守护进程常常在终端打开时启动,在终端关闭时终止。 2

Linux系统有很多守护进程,大多数服务都通过守护进程实现。 1

在Linux系统中,每一个系统与用户进行交流的界面称为图形用户界面。 2

每一个从终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。 1

守护进程不因为用户或终端或其他的变化而受影响。 1

会话组是一个或多个进程组的集合。 1

一个会话通常开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。 1

syslog是Linux操作系统中的系统日志管理服务,通过守护进程syslogd来维护。 1

在Linux系统中,每当系统发现一个孤儿进程,就会自动由init进程收养它。 1

守护进程中用printf输出的字符可以在终端上显示出来。 2

OSI协议参考模型是基于国际标准化组织(ISO)的建议发展起来的,从上到下共分为7层。 1

TCP/IP协议模型将TCP/IP的7层协议模型简化为3层。 2

TCP/IP协议模型是一个庞大的协议族。 1

ping命令是基于TCP协议的。 2

TCP协议和UDP协议都是处于网络层的协议。 2

socket接口是一种特殊的I/O,也是一种文件描述符。 1

有时将内核模块也称做驱动程序,因此,加载驱动时就是加载内核模块。 1

mknod用于创建相关模块。 1

insmod可以根据模块间依存关系以及/etc/modules.conf文件中的内容自动插入模块。 2

设备通常在/dev下面存在一个对应的逻辑设备节点,这个节点以文件的形式存在。 1

设备文件(即设备节点)可通过mknod命令来创建,其中指定了主设备号和次设备号。 1

大多设备以查询方式向设备驱动程序发出输入/输出请求。 2

设备驱动程序是内核的一部分,如果驱动程序出错,则可能导致系统崩溃。 1

设备驱动程序必须为内核或者其子系统提供一个标准接口。 1

设备驱动程序使用一些标准的内核服务

1

设备驱动开发时模块在调用insmod命令时被加载,此时的入口点是main函数。

2

模块在调用insmod命令时被加载,通常在init_module函数中完成设备注册。 1

内核空间使用printk和printf函数实现信息打印。 2

proc伪文件系统让用户可以和内核内部数据结构进行交互,获取有关进程的有用信息。 1

proc存在于内存和硬盘上。 2

块设备驱动程序包括一个request请求队列。 1

Linux操作系统顶层运行的GUI系统兼容X标准的XFree86系统。 1

Qt使用单一的API进行跨平台的编程。 1

GUI是指计算机与其使用者之间的对话接口。 1

Qt/E基于一个X服务器或是Xlib库。 2

Qt的核心机制是信号和插槽。 1

填空题

嵌入式的英文为____。 EMBEDDED

Linux操作系统下的程序开发一般均遵守____协议。

GPL

Linux内核版本号格式是x.y.zz-www,数字x代表版本类型,数字y为____时是稳定版本。 偶数

Linux内核版本号格式是x.y.zz-www,数字x代表版本类型,数字y为____时是开发版本。 奇数

Linux操作系统的文件系统是一个____。 文件树

Linux常见的默认文件系统为____。 EXT3

Linux中把DOS中采用的FAT文件系统(包括FAT12,FAT16 和FAT32)称为____文件系统。 VFAT

硬盘可分为主分区、扩展分区、____。 逻辑分区

Linux系统中具有超级权限的用户称为____用户。 ROOT

Linux下与设备相关的文件一般都在/____目录下。 DEV

Linux 对目录和设备都当作____来进行处理。 文件

将分区与目录相对应的过程叫做____。 挂载

块设备文件是指数据的读写以____为单位的设备。 块

Linux 中文件属性第一个字符“d”表示____文件。 目录

Linux下软驱、光驱、硬盘的挂载点一般位于/____目录下。 MNT

服务的日志信息一般位于/____目录下。 VAR

Linux中添加用户账号的命令为____。 USERADD

Linux中显示当前系统中由该用户运行的进程列表的命令为____。 PS

Linux中改变工作目录的命令为____。 CD

Linux中建立符号链接的命令为____。 LN

Linux中对目录进行打包的命令为____。 TAR

Linux中显示网络连接、路由表和网络接口信息命令为____。 NETSTAT

FTP内部命令中使用____切换本地工作目录。 LCD

Linux中最常用的编译器是____编译器。 GCC

vi有3种模式,分别为命令行模式、插入模式及____模式。 底行

编辑器按功能可以分为____编辑器和全屏幕编辑器两大类。 行

gdb对____文件进行调试。 可执行

工程管理器make读入的配置文件为____。 MAKEFILE

工程管理器make定义了____规则和模式规则。 隐式

ARM处理器支持____(16 位)/ARM(32 位)双指令集。 THUMB

ARM处理器支持16 位/____位器件。 8

大端格式中,数据的高字节存储在____地址中 。 低

小端格式中,数据的高字节存储在____地址中 。 高

ARM7处理器采用____级流水线设计。 3

嵌入式软件开发所采用的编译过程为____编译。 交叉

在嵌入式软件开发中,将程序实际的运行环境称为____机。 目标

____标准所采用的主要技术为边界扫描技术。 JTAG

arm-linux-gcc 交叉编译工具主要包括binutils、____、glibc等软件。 GCC

API即____。 用户编程接口

API遵循UNIX中的应用编程界面标准____。 POSIX

操作系统提供给用户程序调用的一组“特殊”接口称为____。 系统调用

进行系统调用时,程序运行空间需要从用户空间进入____空间,处理完后再返回到用户空间。 内核

系统调用编程接口主要通过C库(____)实现。 LIBC

一个进程启动时,通常都会打开____个文件。 3

不带缓存的文件I/O操作,主要用到的5个函数为open、close、read、write和____。 LSEEK

fopen函数返回一个____。 指针

____通信是指利用多条数据传输线将一个资料的各位同时传送。 并行

在Linux中,实现文件上锁的函数有lock和____。 FCNTL

Linux中最常见最基础的操作对象是____。 文件

当用户在系统中键入命令执行一个程序的时候,它将启动一个____。 进程

系统调度的单位____。 进程

____包含了进程的描述信息、控制信息以及资源信息,它是进程的一个静态描述。 进程控制块

进程执行态说明该进程正在执行,即进程正在占用____。 CPU

Linux系统是一个____进程的系统。

Daemon进程即通常所说的____进程,是Linux中的后台服务进程。。 守护

在Linux中使用____函数创建一个新进程。 FORK

fork函数调用后出现父进程与子进程,其中____的返回值为0。 子进程

____函数族就提供了一个在进程中启动另一个程序执行的方法。 EXEC

exit()函数与_exit()函数最大的区别就在于____函数在exit系统调用之前要检查文件的打开情况,并将文件缓冲区中的内容写回文件。 EXIT()

____函数是用于使父进程阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止。 WAIT

在Linux中,所有的孤儿进程自动由____进程收养。 INIT

____函数用于创建一个新的会话,并担任该会话组的组长。 SETSID

系统日志文件位于/____目录下。 VAR/LOG

TCP/IP的协议参考模型包括网络接口层、____、传输层和应用层。 网络层

TCP为协议参考模型包中____层的协议。 传输

____对话通过三次握手来完成初始化。 TCP

对数据要求高可靠性的应用应选择____协议。 TCP

Linux中的网络编程通过____接口来进行。 SOCKET

SOCK_DGRAM为____套接字。 数据报

在实验中,实验平台采用的CPU为Intel____处理器。 XSCALL

在内核更新与加载实验中,设置的串口波特率为____。 115200

在内核更新与加载实验中,设置的串口数据位为____。 8

在内核更新与加载实验中,设置的数据流控制为____。 无

在内核更新与加载实验中,设置的数据停止位为____。 1

在内核更新与加载实验中,实验平台上使用的串口为COM____。

1

在内核更新与加载实验中,内核映像的后缀部分为____。 ZIMAGE

在内核更新与加载实验中,通过____将内核映像下载到实验平台。

USB

压缩的内核映像通常名为____。 ZIMAGE

未压缩的内核映像通常名为____。 VMLINUX

操作系统内核运行之前运行的一段程序称为____。 BOOTLOADER

程序设计题

下面的程序打开一个文件,并设置该文件权限为0666。请选出应填写在空白处的选项。 int main(void) { int fd; if((fd = open(\O_CREAT | O_TRUNC | O_WRONLY , 0666 ))<0) { perror(\ exit(1); } else { printf(\file: hello.c %d\\n\ } if( __________ ) { perror(\ exit(1); } else printf(\ exit(0); } A、open(fd) > 0 B、open(fd) < 0 C、close(fd) > 0 D、close(fd) < 0 4

下面的程序打开一个文件,写入字符串“Hello! I'm writing to this file!”,使用lseek 函数将文件指针移到文件开始处,并读出10个字节并将其打印出来。请选出应填写在空白处的选项。 int main(void) { int i,fd,size,len; char *buf=\ char buf_r[10]; len = strlen(buf); if((fd = open(\O_RDWR,0666 ))<0) { perror(\ exit(1); } else printf(\file:hello.c %d\\n\ if((size = write( fd, buf, len)) < 0) { perror(\ exit(1); } else printf(\ lseek( __________ ); if((size = read( fd, buf_r, 10))<0) { perror(\ exit(1); } else printf(\form file:%s\\n\ if( close(fd) < 0 ) { perror(\ exit(1); } else printf(\ exit(0); } A、fd, 0, SEEK_CUR B、fd, 0, SEEK_END C、fd, 0, SEEK_SET 3

下面的程序说明文件记录锁函数。首先给flock 结构体的对应位赋相应值,接着使用两

次fcntl函数分别用于给相关文件上锁和判断文件是否可以上锁,这里用到的cmd值分别为F_SETLK 和F_GETLK。请选出应填写在空白处的选项。 void lock_set(int fd, int type) { struct flock lock; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len =0; while(1) { lock.l_type = type; if( __________ ) { if( lock.l_type == F_RDLCK ) printf(\lock set by %d\\n\ else if( lock.l_type == F_WRLCK ) printf(\lock set by %d\\n\ else if( lock.l_type == F_UNLCK ) printf(\lock by %d\\n\ return; } fcntl(fd, F_GETLK, &lock); if(lock.l_type != F_UNLCK) { if( lock.l_type == F_RDLCK ) printf(\lock already set by %d\\n\ else if( lock.l_type == F_WRLCK ) printf(\ getchar(); } } } A、(fcntl(fd, F_SETLK, &lock)) < 0 B、(fcntl(fd, F_SETLK, &lock)) == 0 C、(fcntl(fd, F_SETLK, &lock)) > 0 2

下面的程序测试文件的写入锁。首先创建hello文件,之后对其上写入锁,最后释放写入锁。请选出应填写在空白处的选项。 int main(void) { int fd; fd=open(\| O_CREAT, 0666); if(fd < 0) { perror(\ exit(1); } __________; getchar(); lock_set(fd, F_UNLCK); getchar(); close(fd); exit(0); } void lock_set(int fd, int type) { struct flock lock; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len =0; while(1) { lock.l_type = type; if((fcntl(fd, F_SETLK, &lock)) == 0 ) { if( lock.l_type == F_RDLCK ) printf(\by %d\\n\ else if( lock.l_type == F_WRLCK ) printf(\lock set by %d\\n\ else if( lock.l_type == F_UNLCK ) printf(\lock by %d\\n\ return; } fcntl(fd, F_GETLK,&lock); if(lock.l_type != F_UNLCK) { if( lock.l_type == F_RDLCK ) printf(\lock already set by %d\\n\ else if( lock.l_type == F_WRLCK ) printf(\set by %d\\n\ getchar(); } } } A、lock_set(fd, F_RDLCK) B、lock_set(fd, F_WRLCK) C、lock_set(fd, O_RDONLY) D、lock_set(fd, O_WRONLY) 2

下面的程序测试文件的读取锁。首先创建hello文件,之后对其上读取锁,最后释放读取锁。请选出应填写在空白处的选项。 int main(void) { int fd; fd=open(\| O_CREAT, 0666); if(fd <0) { perror(\ exit(1); } __________; getchar(); lock_set(fd, F_UNLCK); getchar(); close(fd); exit(0); } void lock_set(int fd, int type) { struct flock lock; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len =0; while(1) { lock.l_type = type; if((fcntl(fd, F_SETLK, &lock)) == 0 ) { if( lock.l_type == F_RDLCK ) printf(\by %d\\n\ else if( lock.l_type == F_WRLCK ) printf(\lock set by %d\\n\ else if( lock.l_type == F_UNLCK ) printf(\lock by %d\\n\ return; } fcntl(fd, F_GETLK,&lock); if(lock.l_type !=

F_UNLCK) { if( lock.l_type == F_RDLCK ) printf(\lock already set by %d\\n\ else if( lock.l_type == F_WRLCK ) printf(\set by %d\\n\ getchar(); } } } A、lock_set(fd, F_RDLCK) B、lock_set(fd, F_WRLCK) C、lock_set(fd, O_RDONLY) D、lock_set(fd, O_WRONLY) 1

下面的程序打开一个文件,写入字符串并读出。请选出应填写在空白处的选项。 int main() {

FILE

*stream;

char

s[3]={'a','b','c'};

stream=fopen(\

i=fwrite( __________ ); printf(\ fclose(stream); } A、s,sizeof(char),nmemb,stream B、s,char,nmemb,fd

C、s,sizeof(char),nmemb,FILE D、s,char,nmemb,FILE 4

下面的程序获得当前进程的PID。请选出应填写在空白处的选项。 int main() { printf(\A、getpid() B、getppid() C、open(fd, pid) D、fopen(stream, pid) 1

下面的程序判断fork函数返回值的情况。请选出应填写在空白处的选项。 int main(void) { pid_t result; __________; if(result == -1) { perror(\ exit; } else if(result == 0) { printf(\return value is %d\\nIn child process!!\\nMy PID is%d\\n\ } else { printf(\return value is %d\\nIn father process!!\\nMy PID is%d\\n\ } } A、result = fork() B、result = fork(-1) C、result = fork(0) D、result = fork(1) 1

下面的程序判断fork函数返回值的情况。请选出应填写在空白处的选项。 int main(void) { pid_t result; result = fork() ; if(result == -1) { perror(\ exit; } else if( __________ ) { printf(\return value is %d\\n In father process!!\\nMy PID is%d\\n\ } else { printf(\return value is %d\\n In child process!!\\nMy PID is%d\\n\ } } A、result < 0 B、result == 0

C、result > 0 D、result !== 0 4

下面的程序使用文件名的方式来查找可执行文件,同时使用参数列表的方式。请选出应填写在空白处的选项。 int main() { if(fork()==0) { /*此处相当于调用“ps -ef”命令*/ if( __________ (\ perror(\ } } A、execl B、execle C、execlp D、execve 3

下面的程序使用使用完整的文件目录来查找对应的可执行文件,同时使用参数列表的方式。请选出应填写在空白处的选项。 int main() { if(fork()==0) { /*注意此处已给出ps命令所在的完整路径*/ if( __________ (\ perror(\ } } A、execl B、execle C、execlp D、execve 1

下面的程序将环境变量添加到新建的子进程中去,这里的“env”是查看当前进程环境变量的命令使用使用完整的文件目录来查找对应的可执行文件,同时使用参数列表的方式。请选出应填写在空白处的选项。 命令的完整路径*/ perror(\ } } A、execl B、execle C、execlp D、execve 2

下面的程序将环境变量添加到新建的子进程中去,这里的“env”是查看当前进程环境变量的命令使用使用完整的文件目录来查找对应的可执行文件。请选出应填写在空白处的选项。 int main() { /*命令参数列表,必须以NULL结尾*/ char *arg[]={\ char *envp[]={\ if(fork()==0) { if( __________ (\ perror(\ } } A、execl B、execle C、execlp D、execve

if(

__________

int

main()

{

char

*envp[]={\ if(fork()==0) { /*注意此处已给出env

(\

4

下面的程序为服务器端应用程序,首先建立起socket,然后调用本地端口进行绑定,接着开始与客户端建立联系,并接收客户端发送的消息。请选出应填写在空白处的选项。 #define SERVPORT 3333 #define BACKLOG 10 #define MAX_CONNECTED_NO 10 #define MAXDATASIZE 5 int main() { struct sockaddr_in server_sockaddr,client_sockaddr; int sin_size,recvbytes; int sockfd,client_fd; char buf[MAXDATASIZE]; /*建立socket连接*/ if( __________ ) { perror(\ exit(1); } printf(\success!,sockfd=%d\\n\ /*设置sockaddr_in 结构体中相关参数*/ server_sockaddr.sin_family=AF_INET;

server_sockaddr.sin_port=htons(SERVPORT);

server_sockaddr.sin_addr.s_addr=INADDR_ANY; bzero(&(server_sockaddr.sin_zero),8); /*绑定函数bind*/ if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))== -1) { perror(\ exit(1); } printf(\success!\\n\ /*调用listen函数*/ if(listen(sockfd,BACKLOG)== -1) { perror(\ exit(1); } printf(\ /*调用if((client_fd=accept(sockfd,(struct

acceptsockaddr

函数,等待客户端的连接*/ *)&client_sockaddr,&sin_size))==

-1)

{

-1)

{ perror(\ exit(1); } /*调用recv函数接收客户端的请求*/ if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))== A、(sockfd = socket(AF_INET,SOCK_STREAM,0))== -1 B、(sockfd = socket(AF_INET,SOCK_STREAM,0))== 0 C、(sockfd = socket(AF_INET,SOCK_STREAM,-1))== -1 D、(sockfd = socket(AF_INET,SOCK_STREAM,-1))== 0 1

下面的程序为客户器端应用程序,客户端在建立起socket之后调用connect函数来建立连接。请选出应填写在空白处的选项。 #define SERVPORT 3333 #define MAXDATASIZE 100 main(int argc,char *argv[]) { int sockfd,sendbytes; char buf[MAXDATASIZE]; struct hostent *host; struct sockaddr_in serv_addr; if(argc < 2) { fprintf(stderr,\enter the server's hostname!\\n\ exit(1); } /*地址解析函数*/ if((host=gethostbyname(argv[1]))==NULL) { perror(\ exit(1); } /*创建socket*/ if( __________ ) { perror(\ exit(1); } /*设置sockaddr_in

结构体中相关参数*/

serv_addr.sin_family=AF_INET;

in_addr

serv_addr.sin_port=htons(SERVPORT);

serv_addr.sin_addr=*((struct

perror(\

exit(1); } printf(\ close(sockfd); }

*)host->h_addr); bzero(&(serv_addr.sin_zero),8); /*调用connect函数主动发起对服务器端的连接*/ if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))== -1) { perror(\ exit(1); } /*发送消息给服务器端*/ if((sendbytes=send(sockfd,\-1) { perror(\ exit(1); } close(sockfd); }

A、(sockfd = socket(AF_INET,SOCK_STREAM,0))== 0 B、(sockfd = socket(AF_INET,SOCK_STREAM,0))== -1 C、(sockfd = socket(AF_INET,SOCK_STREAM,-1))== 0 D、(sockfd = socket(AF_INET,SOCK_STREAM,-1))== -1 2

下面的程序首先新建一子进程,然后让其子进程暂停5s。接下来对原有的父进程使用阻塞函数,并使用参数使该父进程不会阻塞。若有子进程退出,则阻塞函数返回子进程号;若没有子进程退出,则阻塞函数返回0,并且父进程每隔一秒循环判断一次。请选出应填写在空白处的选项。 int main() { pid_t pc,pr; __________; if(pc<0) printf(\\\n\ /*子进程*/ else if(pc==0) { /*子进程暂停5s*/ sleep(5); /*子进程正常退出*/ exit(0); } /*父进程*/ else { /*循环测试子进程是否退出*/ do { /*调用waitpid,且父进程不阻塞*/ pr=waitpid(pc,NULL,WNOHANG); /*若子进程还未退出,则父进程暂停1s*/ if(pr==0) { printf(\not exited\\n\ sleep(1); } } while(pr==0); /*若发现子进程退出,打印出相应情况*/ if(pr==pc) printf(\child %d\\n\ else printf(\error occured.\\n\ } } A、pc=fork() B、pc=open(pr) C、pc=pr D、pr=pc 1

下面的程序首先新建一子进程,然后让其子进程暂停5s。接下来对原有的父进程使用阻塞函数,并使用参数使该父进程不会阻塞。若有子进程退出,则阻塞函数返回子进程号;若没有子进程退出,则阻塞函数返回0,并且父进程每隔一秒循环判断一次。请选出应填写在空白处的选项。 int main() { pid_t pc,pr; pc=fork() if(pc<0) printf(\ /*子进程*/ else if(pc==0) { /*子进程暂停5s*/ sleep(5); /*子进程正常退出*/ exit(0); } /*父进程*/ else { /*循环测试子进程是否退出*/ do { /*调用阻塞函数,且父进程不阻塞*/ __________; /*若子进程还未退出,则父进程暂停1s*/ if(pr==0) { printf(\child process has not exited\\n\ sleep(1); } } while(pr==0); /*若发现子进程退出,打印出相应情况*/ if(pr==pc) printf(\ else printf(\ } } A、pc=wait(pc,NULL,WNOHANG) B、pc=waitpid(pc,NULL,WNOHANG) C、pr=wait(pc,NULL,WNOHANG) D、pr=waitpid(pc,NULL,WNOHANG) 4

下面的程序建立一个守护进程,该守护进程每隔10s在/tmp/dameon.log中写入一个字符串。请选出应填写在空白处的选项。 #define MAXFILE 65535 int main() { pid_t pc; int i,fd,len; char *buf=\is a Dameon\\n\ len =strlen(buf); /*第一步*/ __________; if(pc<0) { printf(\\\n\ exit(1); } else if(pc>0) exit(0); /*第二步*/ setsid(); /*第三步*/ chdir(\ /*第四步*/ umask(0); /*第五步*/ for(i=0;i

*/

while(1)

if((fd=open(\

{ perror(\ exit(1); } write(fd, buf, len+1); close(fd); sleep(10); } } A、pc=fork()

B、fd=open(pc) C、pc=fd D、pc=open(buf) 1

下面的程序建立一个守护进程,该守护进程每隔10s在/tmp/dameon.log中写入一个字符串。请选出应填写在空白处的选项。 #define MAXFILE 65535 int main() { pid_t pc; int i,fd,len; char *buf=\is a Dameon\\n\ len =strlen(buf); /*第一步*/ pc=fork(); if(pc<0) { printf(\\\n\ exit(1); } else if(pc>0) exit(0); /*第二步*/ setsid(); /*第三步*/ chdir(\ /*第四步*/ umask(0); /*第五步*/ __________ close(i); /*守护进程创建完成,以下开始正式进入守护进程工作*/ while(1) {

if((fd=open(\

{ perror(\ exit(1); } write(fd, buf, len+1); close(fd); sleep(10); } } A、for(i=3;i< MAXFILE;i--) B、for(i=0;i< MAXFILE;i--) C、for(i=3;i< MAXFILE;i++) D、for(i=0;i< MAXFILE;i++) 4

hello.c和hello.h位于同一目录下,源代码如下所示。 /*hello.c*/ int main() { printf(\everyone!\\n\} /*hello.h*/ #include 要求编写Makefile文件实现对这两个文件的编译,Makefile文件如下所示。请选出应填写在空白处的选项。 /*Makefile*/ hello:hello.c hello.h __________ A、gcc hello.c&hello.h -o hello B、gcc hello.c hello.h -o hello C、make hello.c&hello.h -o hello D、make hello.c hello.h -o hello 2

下面的程序建立一个守护进程,然后在该守护进程中新建一个子进程,该子进程暂停10s,然后自动退出,并由守护进程收集子进程退出的消息。子进程退出后,守护进程循环暂停,其间隔时间为10s。子进程和守护进程的退出消息均在/var/log/messages中输出。请选出应填写在空白处的选项。 #define MAXFILE 65535 int main(void) { pid_t child1,child2; int i; child1 = fork(); if( __________ ) { perror(\fork\ exit(1); } else if( child1 > 0 ) exit( 0 ); openlog(\LOG_PID, LOG_DAEMON); setsid(); chdir( \ umask( 0 ); for( i = 0 ; i < MAXFILE ; i++ ) { close( i ); } child2 = fork(); if( child2 == -1 ) { perror(\fork\ exit(1); } else if( child2 == 0 ) { syslog( LOG_INFO, \ sleep(10); syslog( LOG_INFO, \child2 is going to exit! \ exit(0); } else { waitpid( child2, NULL, 0); syslog( LOG_INFO , \child1 noticed that child2 has exited \ closelog(); while(1) { sleep(10); } } } A、child1 == -1 B、child1 == 0 C、child1 > 0

D、child1 >= 0 1

下面的程序实现对文件属性的查询。请选出应填写在空白处的选项。 static int get_file_size_time(const

char

*filename) { {

struct

stat stat

statbuf; on %s }

if(stat(filename,&statbuf)==-1) if(S_ISDIR(statbuf.st_mode))

printf(\

Error:%s\\n\return(-1);

return(1); if(S_ISREG(statbuf.st_mode))

printf(\ return(0); } int main(int argc,char **argv) { DIR *dirp; struct dirent *direntp; int stats; if( __________ ) { printf(\filename\\n\\a\ exit(1); } if(((stats=get_file_size_time(argv1))==0)||(stats==-1))exit(1); if((dirp=opendir(argv1))==NULL) { printf(\Directory %s Error:%s\\n\

exit(1);

}

while((direntp=readdir(dirp))!=NULL) if(get_file_size_time(direntp->d_name)==-1) break; closedir(dirp); exit(1); } A、argc!=1 B、argc!=2 C、argv!=1 D、argv!=2 1

程序设计题4

下面的程序实现文件的拷贝。请选出应填写在空白处的选项。 #define BUFFER_SIZE 1024 int main(int argc,char **argv) { int from_fd,to_fd; int bytes_read,bytes_write; char bufferBUFFER_SIZE; char *ptr; if( __________ ) { fprintf(stderr,\fromfile

tofile\\n\\a\

exit(1);

} }

if((from_fd=open(argv1,O_RDONLY))==-1) { fprintf(stderr,\%s Error:%s\\n\

exit(1);

if((to_fd=open(argv2,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)

{ fprintf(stderr,\%s Error:%s\\n\ exit(1); } while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))

{ if((bytes_read==-1)&&(errno!=EINTR)) break; else if(bytes_read>0) { ptr=buffer; while(bytes_write=write(to_fd,ptr,bytes_read)) { if((bytes_write==-1)&&(errno!=EINTR)) break; else

if(bytes_write==bytes_read) break; else if(bytes_write>0) {

ptr+=bytes_write;

bytes_read-=bytes_write; } } if(bytes_write==-1) break; } } close(from_fd); close(to_fd); exit(0); } A、argc!=0 B、argc!=1 C、argc!=2 D、argc!=3 4

下面的程序实现对字符串倒序输出。请选出应填写在空白处的选项。 int display1 (char *string) { printf (\ __________ { char *string2; int size,i; size = strlen (string1); string2 = (char *) malloc (size + 1); for (i = 0; i< size; i++) string2[size+1] = ' '; printf(\{ char string[] = \ display1 (string); display2 (string); } A、int display2 (char *string) B、int display2 (char *string1) C、int display2 (char *string2) 2

下面的程序实现对字符串倒序输出。请选出应填写在空白处的选项。 int display1 (char *string) { printf (\original string is %s \\n\string); } int display2 (char *string1) { char *string2; int size,i; size = strlen (string1); string2 = (char *) malloc (size + 1); for (i = 0; i< size; i++) __________ ; string2[size+1] = ' '; printf(\string afterward is %s\\n\} int main () { char string[] = \ display1 (string); display2 (string); }

A、string2[size - i -1] = string1[i] B、string2[size - i ] = string1[i] C、string2[size - i + 1] = string1[i] D、string2[size - i ] = string1[i+1] 1

下面的程序实现对字符串倒序输出。请选出应填写在空白处的选项。 int display1 (char *string) { printf (\ __________ { char *string2; int size,i; size = strlen (string1); string2 = (char *) malloc (size + 1); for (i = 0; i< size; i++) string2[size+1] = ' '; printf(\{ char string[] = \ display1 (string); display2 (string); } A、int display2 (char *string) B、int display2 (char *string1) C、int display2 (char *string2) 2

下面的程序实现对字符串倒序输出。请选出应填写在空白处的选项。 int display1 (char *string) { printf (\original string is %s \\n\string); } int display2 (char *string1) { char *string2; int size,i; size = strlen (string1); string2 = (char *) malloc (size + 1); for (i = 0; i< size; i++) __________ ; string2[size+1] = ' '; printf(\string afterward is %s\\n\} int main () { char string[] = \ display1 (string); display2 (string); }

A、string2[size - i -1] = string1[i] B、string2[size - i ] = string1[i] C、string2[size - i + 1] = string1[i] D、string2[size - i ] = string1[i+1] 1

本文来源:https://www.bwwdw.com/article/dnbw.html

Top