《嵌入式linux程序开发》课程设计报告 fcntl()编程实现

发布时间 : 星期一 文章《嵌入式linux程序开发》课程设计报告 fcntl()编程实现更新完毕开始阅读

《嵌入式linux程序开发》课程设计报告 fcntl()编程实现Ⅰ 陈丽丹 07323202

fd = open(\ if(fd < 0) {

printf(\ exit(1); }

/* 给文件上读取锁 */ lock_set(fd, F_RDLCK); getchar();

/* 给文件解锁 */

lock_set(fd, F_UNLCK); getchar(); close(fd); exit(0); }

/* write_lock.c */ #include #include #include #include #include #include #include \

int main(void) {

int fd;

/* 首先打开文件 */

fd = open(\ if(fd < 0) {

printf(\ exit(1); }

/* 给文件上写入锁 */ lock_set(fd, F_WRLCK); getchar();

/* 给文件解锁 */

lock_set(fd, F_UNLCK); getchar(); close(fd); exit(0); }

Page 9 of 15

《嵌入式linux程序开发》课程设计报告 fcntl()编程实现Ⅰ 陈丽丹 07323202

Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作

? Makefile的作用是根据配置的情况,构造出需要编译的源文件列表,然后分别编译,链接。

? Linux内核中与Makefile相关的文件:

? 顶层Makefile:整个内核配置、编译的总体控制文件。

? .config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果。

? arch/*/Makefile:位于各种 CPU 体系目录下的 Makefile,如 arch/arm/Makefile,是针对特定平台的 Makefile。

? 各个子目录下的 Makefile:比如 drivers/Makefile,负责所在子目录下源代码的管理。

? Rules.make:规则文件,被所有的 Makefile 使用。 ? Makefile是Make读入的唯一配置文件

? 由make工具创建的目标体(target),通常是目标文件或可执行文件 ? 要创建的目标体所依赖的文件(dependency_file) ? 创建每个目标体时需要运行的命令(command) ? 隐式规则

? 隐含规则能够告诉make怎样使用传统的技术完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可 ? C编译:.c变为.o

? $(CC) –c $(CPPFLAGS) $(CFLAGS) ? C++编译:.cc或.C变为.o

? $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) ? 模式规则

? 模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化了Makefile的编写

? 模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明 ? 直接运行make ? 选项

? -C dir读入指定目录下的Makefile-f file读入当前目录下的file文件作为Makefile

? -i忽略所有的命令执行错误

? -I dir指定被包含的Makefile所在目录 ? -n只打印要执行的命令,但不执行这些命令 ? -p显示make变量数据库和隐含规则 ? -s在执行命令时不显示命令

? -w如果make在执行过程中改变目录,打印当前目录名

/* makefile.c */ EXEC_WR = write_lock OBJS_WR = write_lock.o EXEC_RD = read_lock

Page 10 of 15

《嵌入式linux程序开发》课程设计报告 fcntl()编程实现Ⅰ 陈丽丹 07323202

OBJS_RD = read_lock.o

HEADERS =

CC = gcc INC = -I.

CFLAGS = ${INC} -g

all:${EXEC_WR} ${EXEC_RD} ${EXEC_WR} : ${OBJS_WR}

${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJS_WR} ${EXEC_RD} : ${OBJS_RD}

${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJS_RD}

${OBJS_WR} : ${HEADERS} ${OBJS_RD} : ${HEADERS}

.PHONY : clean clean :

-rm -f ${OBJS_WR} ${EXEC_WR} ${OBJS_RD} ${EXEC_RD}

六.Gcc编译器的安装过程

gcc 是GNU 的C 和C++ 编译器,它是Linux 中最重要的软件开发工具。实际上,gcc 能够编译三种语言:C、C++ 和Object C(C 语言的一种面向对象扩展)。利用gcc 命令可同时编译并连接C 和C++ 源程序。汇编语言的编译器为as。编译器被成功的移植到不同的处理平台上。标准PCLinux上的gCC是FOR INTEL CPU的,而ARM系列开发套件使用的是FOR arm系列处理器的gcc是arm-elf-gcc和arm-elf-as 及其相应的GNUBinutils 工具集(如ld 链接工具,objcopy,objdump等工具)

安装步骤:

1.共享文件:

虚拟机--设置--opintons--(共享文件)shared Folders--添加‘Linux V4.0’改名为“cld”

2.解压安装包,安装交叉编译器gcc 桌面--新建终端

命令: cd /mnt ls

cd hgfs cd cld ls

Page 11 of 15

《嵌入式linux程序开发》课程设计报告 fcntl()编程实现Ⅰ 陈丽丹 07323202

./install.sh

Page 12 of 15

联系合同范文客服:xxxxx#qq.com(#替换为@)