嵌入式Linux C语言应用开发试题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式Linux C语言应用开发试题及答案
一:选择题
1.下面不是对Linux操作系统特点描述的是( B )。

[A] 良好的可移植性[B] 单用户[C] 多用户[D] 多任务
2.查看创建目录命令mkdir的帮助文档,可以使用命令( D)。

[A] mkdir –h [B] help mkdir [C] mkdir -p [D] man mkdir
3.在C语言中,要求运算数必须是整型的运算符是( D )。

[A] / [B] ++ [C] != [D] %
4.C语言程序的三种基本程序是( A )。

[A] 顺序结构,选择结构,循环结构
[B] 递归结构,循环结构,转移结构
[C] 嵌套结构,递归结构,顺序结构
[D] 循环结构,转移结构,顺序结构
5.数据结构包含的内容不包括(a)
A.线性结构
B.存储结构
C.逻辑结构
D.数据运算
6.向一个单链表linklist中的节点t后面插入一个节点p,下列操作正确的是(a)
A.p->next = t->next;t->next = p;
B.t->next = p->next;t->next = p;
C.t->next = p;p->next = t->next;
D.t->next = p;t->next = p->next;
7.下列哪种打开文件的方式不能修改文件已有的内容( B )
[A] r+ [B] r [C] w+ [D] a+
8.以下哪种不是进程的状态( B )
[A] 运行态[B] 锁定态[C] 睡眠态[D] 停止态
9.常用来进行多任务同步的机制是( B )
[A]管道[B] 信号量[C]信号[D]共享内存
10.下列对于有名管道描述错误的是( D )
[A] 可以用于互不相关的进程间
[B] 通过路径名来打开有名管道
[C] 在文件系统中可见
[D] 管道内容保存在磁盘上
11.不能被用户进程屏蔽的信号是( B )
[A] SIGINT [B] SIGSTOP [C] SIGQUIT [D] SIGILL
12.fread()返回值的含义是( B )
[A] 读取的字节数[B] 读取的对象数[C] 缓冲区的首地址[D] 0
13.以下不属于socket的类型的是 ( )。

D
[A] 流式套接字
[B] 数据报套接字
[C] 原始套接字
[D] 网络套接字
14.下面说法错误的是()C
[A] accept函数连接建立成功会返回一个连接套接字
[B] listen函数会把普通套接字编程监听套接字
[C] TCP网络通信编程中不能使用sendto函数
[D] TCP网络通信中在close函数和接受函数之间进行四次挥手
15.Socket API中,使用SOCK_STREAM,套接字是什么类型()(联发科)A
[A] 流式套接字 [B] 数据报套接字 [C] 原始套接字 [D] 其他套接字
16.CPSR寄存器中反映处理器状态的位是____。

(D)
[A] J位[B] I位[C ] F位[D ] T位
17.I2C协议中有几根线____。

(B)
[A] 1[B] 2 [C ] 3 [D ] 4
18.ATPCS规定中,栈是____。

(B)
[A] 满加栈[B] 满减栈[C ] 空加栈[D ] 空减栈
19.linux要求bootloader在运行内核前,让系统进入何种模式(B)
[A] user[B] svc [C] system
20.u-boot的命令中,设置环境变量的命令是(A)
[A] setenv [B] printenv [C] tftp [D] bootm
21.下列哪些命令可以加载外部模块(C)
A: lsmod
B: rmmod
C: insmod
D: modprobe
22.通常情况下,kmalloc函数能分配的最大内存是(C)
A: 4K
B: 64K
C: 128K
D: 4M
23.如果键盘输入为abcdef,程序如下所示,打印结果应该是( A )
char buffer[6];
……
fgets(buffer, 6, stdin);
printf(“%s”, buffer);
[A] abcde [B] abcdef [C] abcdef 后出现乱码[D] 段错误
24.以下哪种用法可以等待接收进程号为pid的子进程的退出状态( A )
[A] waitpid(pid, &status, 0) [B] waitpid(pid, &status, WNOHANG)
[C] waitpid(-1, &status, 0) [D] waitpid(-1, &status, WNOHANG)
25.read函数执行成功的返回值不可能是为( D )
[A] 期望读取的字节数[B] 0 [C] 实际读取的字节数[D] -1
二:简答题
1、简述TCP/IP建立连接的过程。

(傲天动联笔试面试题)(10分)
第一次握手:建立连接时,客户端发送SYN包((SYN=i)到服务器,并进入SYN SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN (ACK=i+1 ),同时自己也发送一个SYN包((SYN j)}即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN十ACK包,向服务器发送确认包ACK(ACK=j+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客
户端与服务器开始传送数据。

2、简述TCP和 UDP的异同点(10分)
相同点:都是传输层协议
不同点:tcp协议面向连接,提供可靠的传输;udp协议无连接,不保证可靠的传输
3、请描述进程和程序的区别?(5分)
进程和程序的区别
程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念
进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡进程是一个独立的可调度的任务
进程是一个抽象实体。

当系统在执行某个程序时,分配和释放的各种资源
进程是一个程序的一次执行的过程
进程是程序执行和资源管理的最小单位
4、已知遍历结果如下,试画出对应的二叉树
前序:A B C E H F I J D G K
中序:A H E C I F J B D K G
5、简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,我们要做哪些事
情?(10分)
答:
当异常产生时, ARM core:
1. 拷贝CPSR 到SPSR_<mode>
2. 设置适当的CPSR 位:
1>改变处理器状态进入ARM 状态
2>改变处理器模式进入相应的异常模式
3>设置中断禁止位禁止相应中断(如果需要)
3. 保存返回地址到LR_<mode>
4. 设置PC 为相应的异常向量
返回时, 异常处理需要:
1. 从SPSR_<mode>恢复CPSR
2. 从LR_<mode>恢复PC
Note:这些操作只能在ARM 态执行.
6、描述u-boot启动流程( 10分)
第一阶段汇编实现。

设置CPU模式,屏蔽中断,关闭MMU和cache,
初始化内存控制器,搬运u-boot到内存,设置堆栈(sp),清空BSS段
第二阶段C实现。

填充板级信息,初始化外设,执行命令
7、简述命令mknod /dev/zero c 1 5 的作用和命令各部分的含义,并写出创建一个块设备节点的命令。

mknod //创建设备节点命令
/dev/zero //指定要创建的设备节点的名称
c //要创建的设备节点为字符设备节点
1//指定主设备号
5 //指定次设备号
创建块设备节点:mknod /dev/block1 b 254 2
8、用文件IO分别实现标准IO中的(r, r+, w, w+, a, a+),文件名由argv[1]传入程序.
(O_RDONL Y, O_WRONL Y, O_RDWR, O_CREA T, O_TRUNC, O_APPEND)(10分)
r:open(argv[1],O_RDONL Y);
r+: open (argv[1],O_RDWR);
w: open(argv[1],O_WRONL Y | O_CREAT | O_TRUNC,0666);
w+: open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666);
a: open(argv[1],O_WRONL Y | O_CREAT | O_APPEND,0666);
a+: open(argv[1],O_RDWR | O_CREAT | O_APPEND,0666);
三、程序题:
1、写程序,创建一个具有十个节点的完全二叉树
要求:先定义二叉树的节点,该程序返回创建的二叉树的根节点地址
typedef int datatype;
typedef struct _tree{
datatype data;
struct _tree *lchild,*rchild;
}bitree;
bitree *create_bitree(int i,int n){
bitree *root;
root = (bitree*)malloc(sizeof(bitree));
root->data = i;
if(2 * i <= n){
root->lchild = create_bitree(2 * i,n);
}else{
root->lchild = NULL;
}
if(2 * i + 1 <= n){
root->rchild = create_bitree(2 * i + 1,n);
}else{
root->rchild = NULL;
}
return root;
}
2、
编写程序实现如下功能(10分):
reader.c 从argv[1]所指定的文件中读取内容,依次写到管道
/home/linux/myfifo中
writer.c 从管道/home/linux/myfifo中读取内容,写到argv[1]所指定
的文件中并保存
代码中可省略头文件,/home/linux/myfifo无需创建
Read.c
int main(int argc, const char *argv[])
{
int fd,fd_src;
char buf[32];
int bytes;
if(argc < 2)
{
printf("Usage %s src_file\n",argv[0]);
return -1;
}
if((fd = open("/home/linux/myfifo",O_WRONL Y)) < 0)
{
perror("fail to open");
return -1;
}
if((fd_src = open(argv[1],O_RDONL Y)) < 0)
{
perror("fail to open");
return -1;
}
while((bytes = read(fd_src,buf,32)) > 0)
{
write(fd,buf,bytes);
}
close(fd);
close(fd_src);
return 0;
}
Write.c
int main(int argc, const char *argv[])
{
int fd,fd_dest;
char buf[32];
int bytes;
if(argc < 2)
{
printf("Usage %s dest_file\n",argv[0]);
return -1;
}
if((fd = open("/home/linux/myfifo",O_RDONL Y)) < 0)
{
perror("fail to open");
return -1;
}
if((fd_dest = open(argv[1],O_WRONL Y | O_CREAT | O_TRUNC,0666)) < 0) {
perror("fail to open");
return -1;
}
while((bytes = read(fd,buf,32)) > 0)
{
write(fd_dest,buf,bytes);
}
close(fd);
close(fd_dest);
return 0;
}。

相关文档
最新文档