嵌入式Linux应用程序开发测试题 下载本文

内容发布更新时间 : 2024/5/7 17:14:40星期一 下面是文章的全部内容请认真阅读。

printf(\fork,count=%d\\n\

result=fork(); if(result<0)

printf(\fail\\n\ else if(result>0) {

count++;

printf(\is parent!\\n”); } else {

count--;

printf(\is child!\\n\

}

printf(\fork count=%d\\n\ return 0; }

before fork,count=5 This is child after fork count=4 This is parent! after fork count=6 程序的执行过程如下:

程序先定义了两个变量result和count,然后输出变量count的值, 得到\fork count=5\这一行输出。当执行到result=fork()时程序分叉,产生父子两个进程。系统首先调度子进程执行,直至子进程结束。

而在子进程中result为0,故走的是条件分支的最后一个分支,输出: This is child. after fork count=4

子进程执行完了之后调度父进程执行,直至父进程结束。而在父进程中result为子进程号,大于0,于是走条件分支的第二个个分支,输出: This is parent after fork count=6 四、编程题

1、编写一个C语言源程序ex.c,(1)用以在打开当前目录下的文件

“ex.txt”,如果没有则创建该文件,并使其具有读写属性,(2)编写一个makefile实现自动编译,生成可执行文件ex。

void main(void) {

}

close(fid); }

objects = ex.o

exec = ex all:$(objects)

gcc –o $(exec) $(objects)

int fid;

fid = open(“./ex.txt”,O_RDWR|O_CREAT); if(fid==-1) {

printf(“open or create error \\n”); exit(0);

ex.o:ex.c

gcc –c ex.c

clean:

rm –r $(exec) $(objects)

2、假定你在目录/root/arm下有一个C程序,它由几个单独的文件组成,而这几个文件又分别包含了其他文件,如下图所示: 文件 main.c list.c symbol.c table.c table.h 包含文件 stdio.h, table.h list.h symbol.h table.h symbol.h, list.h 试编写makefile文件,最终的目标文件为ex1(交叉编译器为arm-linux-gcc)

CC=arm-linux-gcc

ex1: main.o list.o symbol.o table.o

$(CC) -o ex1 main.o list.o symbol.o table.o main.o: main.c table.h symbol.h list.h $(CC) -c -o main.o main.c list.o: list.c list.h $(CC) -c -o list.o list.c symbol.o: symbol.c symbol.h $(CC) -c -o symbol.o symbol.c table.o: table.c table.h symbol.h list.h

$(CC) -c -o table.o table.c clean:

rm ex *.o

五、简答题

1、什么是交叉编译?嵌入式交叉编译怎么实现? 2、Bootloader启动流程是怎么样的?

3、比较全缓冲、行缓冲和不带缓冲,并说明标准输入输出、标准错误各使用哪种类型的缓冲?

4、编写守护进程包括哪几个步骤,每个步骤分别怎么实现? 5、进程的信号与信号量通信有什么区别?

6、无名管道和有名管道在使用时有什么区别?分别使用什么函数创建无名管道和有名管道?