中北大学嵌入式习题答案第5章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章 linux与C语言编程基础
一、填空题
1、在宿主机上使用编译器软件将嵌入式应用、嵌入式操作系统编译成为可以在目标机上运行代码的过程,称为交叉编译,而采用的编译器称为交叉编译器。
2、C语言中采用 _ asm 标记实现嵌汇编。
3、使用gcc命令若想生成调试信息,应该给gcc加参数 -g ,若想生成警告信息,应该给gcc加参数 -Wall 。
4、有源文件test.c,若想生成目标文件test.o,正确的命令是 gcc -c test.c 。
5、gdb对可执行文件进行调试。
6、工程管理器make读入的配置文件为__makefile__。
7、不带缓存的文件I/O操作,主要用到的5个函数为open、close、read、write和 lseek 。
这里的不带缓存是指每一个函数都只调用系统中的一个函数(不理解这句话的含义)。
这些函数虽然不是ANSI C的组成部分,但是是POSIX 的组成部分。
lseek函数(随机访问文件)移动文件读/写指针
使用UNIX系统调用来读取文件容时,系统究竟是从文件的哪一个位置读取数据,完全由文件指针决定。例如:刚开始读取数据时,文件指针通常是指向文件的起始位置。
二、选择题
1、假设当前目录下有文件Makefile,下面是其容:
pr1: prog.o subr.o
gcc –o pr1 prog.o subr.o
prog.o: prog.c prog.h
gcc –c –l prog.o prog.c
subr.o: subr.c
gcc –c –o subr.o subr.c
clear:
rm –f pr1*.o
现在执行命令make clear,实际执行的命令是( A ):
A、rm –f pr1*.o
B、gcc –c –l prog.o prog.c
C、gcc –c –o subr.o subr.c
D、都执行
2、_ B 命令是在vi编辑器中执行存盘退出。
A ) q
B ) wq C) q! D) WQ
3、在vi编辑器中执行不存盘退出的命令为( A )
A、:q 编译结束,退出vi
B、:sq
C、:q! 不保存编辑过的文档,强制退出
D、:wq 保存文档并推出
4、vi编辑器中不包括下面哪种模式( A )
A、编辑模式
B、命令行模式
C、插入模式
D、底行模式
【解】:命令行模式——初始模式
插入模式
底行模式
5、下面哪种语言GCC编译器不支持( C )
A、C
B、Java
C、ASP
D、C++
ASP即Active Server Pages,是MicroSoft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。当服务器收到对ASP文件的请求时,它会处理包含在用于构建发送给浏览器的HTML(Hyper Text Markup Language,超文本置标语言)网页文件中的服务器端脚本代码。除服务器端脚本代码外,ASP文件也可以包含文本、HTML (包括相关的客户端脚本)和com组件调用
6、GCC的正确编译流程为( A )
A、预处理-编译-汇编-
B、预处理-编译--汇编
C、预处理--编译-汇编
D、编译-预处理-汇编-
7、下面哪项关于GCC编译过程的说法是错误的( D )
A、编译阶段GCC要检查代码规性、是否有语法错误等,确定代码的实际要做的工作
B、汇编阶段是把编译阶段生成的.s文件转成目标文件
C、预处理阶段,GCC编译器将代码中包含的头文件编译进来
D、GCC在编译时默认使用静态库
8、下面哪些与GDB相关的说法是错误的( B )
A、GDB能调试可执行文件
B、GDB能调试源代码
C、GDB对编译过程有要求
D、GDB支持交叉调试
9、在GDB调试过程中,使用下面哪项命令设置断点,其中m代表行号 A
A、b m
B、c m
C、n m
D、s m
三、写程序
有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程在暂停3s后异常退出,另一个子进程运行“cat my.txt”指令。父进程先用阻塞方式等待第二个进程的结束,然后用非阻塞方式等待第一个子进程的退出,待收集到两个子进程结束的消息后,父进程就返回。
Printf(“I am child1 and I execute ‘cat my.txt ’ \n”); If(execlp(“cat”,”my.txt”,NULL)<0);
四、读程序,写出程序运行结果
/* thread.c */
….
#define THREAD_NUMBER 3
#define REPEAT_NUMBER 3
#define DELAY_TIME_LEVELS 10.0 void * thrd_func(void *arg){ int thrd_num = (int)arg;
int delay_time = 0;
int count = 0;
printf("Thread %d is starting\n", thrd_num);
for (count = 0; count < REPEAT_NUMBER; count++)
{
delay_time = count + 1;
sleep(delay_time);
printf("\tThread %d: job %d delay = %d\n", thrd_num, count,
delay_time);
}
printf("Thread %d finished\n", thrd_num);
pthread_exit(NULL);
int main(void)
{
pthread_t thread[THREAD_NUMBER];
int no = 0, res;
void * thrd_ret;
srand(time(NULL));
for (no = 0; no < THREAD_NUMBER; no++)
{
res = pthread_create(&thread[no], NULL, thrd_func, (void*)no);
if (res != 0)
{
printf("Create thread %d failed\n", no);
exit(res);
}
}
printf("Create treads success\n Waiting for threads to finish...\n");
for (no = 0; no < THREAD_NUMBER; no++)