第五章 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 D、都执行
C、gcc –c –o subr.o subr.c
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 #define REPEAT_NUMBER
3 3
#define DELAY_TIME_LEVELS 10.0 void * thrd_func(void *arg){
int thrd_num = (int)arg;