嵌入式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语言程序的三种基本程序是嵌入式linux开发书籍(  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状态;
第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包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模式,屏蔽中断,关闭MMUcache
初始化内存控制器,搬运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_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_TRUNC, O_APPEND)(10分)
r  openargv[1],O_RDONLY;
r+:  open (argv[1],O_RDWR);
w:  open(argv[1],O_WRONLY | O_CREAT | O_TRUNC,0666);
w+:  open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666);
a:  open(argv[1],O_WRONLY | 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;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。