使用命令“arm-none-linux-gnueabi-gcc -o open open.c -static”编译 open 文件,如下图所示,使用命令“ls”可以看到生成了 open 可执行文件。
这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节。将编译成的可执行文件 open,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序如下。
如上图所示,可以看到打开/dev/leds 成功,这个是板载 LED 的内核驱动,调用的时候, 还调用了内核驱动中的函数,这个函数会打印“LEDS_CTL DEBUG:Device Opened Success!”和“LEDS_CTL DEBUG:DeviceOpened Success!”
然后打印句柄 ID,/dev/leds fd is 3
调用“/bin/test1”会报错“open /bin/test1 failed”,这种打开文件的方式是 linux 中标准的用法,几乎所有对文件的 open 操作都会加上出错报警的语句。
创建“/bin/test2”会打印“/bin/test2 fd is 4”,表明创建“/bin/test2 ”成功了。
使用命令“ls /bin/test2”,查看一下对应目录‘/bin’下应该新建了“test2”,如下图所示。
另外的“dev/leds”本身就存在,如下图所示,这是驱动的设备节点文件,在后面的实验会介绍如何操作调用,在 linux 驱动实验中会介绍这个设备节点文件是如何生成的。
16.3 创建函数 creat 和 和 open creat 函数介绍
关于 creat 函数,首先这个单词并不是表示创建的意思,创建的英文单词是“create”, 这是早期的一个小的拼写错误,却一直沿用下来。
在介绍 open 函数的时候,可以看到 open 函数有两种形式,一个是两个参数一个是三个参数,早期的时候 open 只有三个参数的形式,三个参数的形式会导致 open 函数无法打开一个未创建的文件,也就是无法建立文件,所以就有了这个 creat 函数。
现在 creat 函数可以完全用 open 替代,考虑到在阅读代码的时候可能会碰到,所以简单介绍一下。
creat 函数原型如下。
int creat(const char * pathname, mode_t mode);
creat 函数只有两个参数,参数的含义和 open 类似。大家看到这个函数的时候知道它是创建文件的就成,在写代码的时候完全可以用 open 代替。 creat 函数例程
编写简单的 creat.c 文件测试 creat 函数。首先添加头文件,如下所示。
然后 main 函数如下所示。
第 22 行、27 行、31,open 可以打开已有的文件,也可以打开不存在的文件,即创建文件,创建文件的时候需要在参数中添加标志位 O_CREAT。在第 27 行代码中,没有添加标志位,运行的时候肯定会报错,这么写是希望大家能够记住这个参数。
第 36 行是使用 creat 函数创建文件“test3”,注意一下 creat 函数和 open 函数在创建文件的时候,参数的区别。 编译运行测试
在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/iofile”,将源码creat.c 拷贝进去,如下图所示。
使用命令“arm-none-linux-gnueabi-gcc -o creat creat.c -static”编译 creat.c 文件,如下图所示,使用命令“ls”可以看到生成了 creat 可执行文件。
这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节
将编译成的可执行文件 creat,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序如下。