嵌入式技术学习笔记(六)

嵌入式Linux系统开发

学习嵌入式Linux系统开发实际上是学习用户编程接口API
1、Linux系统开发是指通过内核提供的服务实现相应的功能
Linux系统构成:用户空间,内核空间
2、划分空间的目的
分成两个空间是为了防止用户修改内核中的内容,使得原本应该实现的功能无法实现。为了保护内核中核心数据不发生变化,保护内核。
用户空间不能随意访问内核空间
3、用户如何访问内核空间
系统调用:内核提供的安全访问机制。 其作用为使用户空间可以访问内核空间并获取服务
而硬件中断和软件中断也可以进入内核空间
4、用户如何发送系统调用
调用系统提供的函数接口
API:用户编程接口

通过学习文件操作、进程、线程操作(多任务)、网络访问、设备访问这些来开发应用软件

I/O技术
perror()函数,可以自动换行,用于打印系统的错误信息
errno 系统全局变量,用于保存系统调用的错误值
(1)
使用creat所需的头文件
#include // 提供open()函数
#include // 提供mode_t类型
#include // 提供open()函数的符号
#include // 提供close()函数
定义函数:int creat(const char * pathname, mode_tmode)
creat(“hello.txt”,0655)格式为函数名 形参 返回值,其中0655指的是文件的类型,这个函数用于创建文件
(2)
使用open函数所需头文件
#include
定义函数:int open(const char * pathname, int oflag, … )
对于 open 函数来说,第三个参数(…)仅当创建新文件时才使用,用于指定文件的访问权限位(access permission bits)。pathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp);oflag 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。
O_RDONLY  只读模式
O_WRONLY  只写模式
O_RDWR  读写模式
打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的:
O_APPEND  每次写操作都写入文件的末尾
O_CREAT  如果指定文件不存在,则创建这个文件
O_EXCL  如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
O_TRUNC  如果文件存在,并且以只写/读写方式打开,则清空文件全部内容
O_NOCTTY  如果路径名指向终端设备,不要把这个设备用作控制终端。
O_NONBLOCK  如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)
open(“hello.txt”,O_RDWD)打开hello.txt文件,可读可写。
如果没有文件,也可以添加O_CREAT来创建相应的文件,并可以添加返回值来确定文件类型。
(3)
使用write所需头文件
#include
定义函数 ssize_t write(int fd,const void* buf,size_t count);
参数说明:
fd : 是文件描述符(write所对应的是写,即就是1)
buf:通常是一个字符串,需要写入的字符串
count:是每次写入的字节数
成功:返回写入的字节数
失败:返回-1并设置errno
(4)
使用read函数所需头文件
#include
ssize_t read(int fd,void*buf,size_t count)
参数说明:
fd: 是文件描述符
buf: 为读出数据的缓冲区;
count: 为每次读取的字节数(是请求读取的字节数,读上来的数据保
存在缓冲区buf中,同时文件的当前读写位置向后移)
(5)所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo。cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。文件被打开时,cfo 会被初始化为 0,除非使用了O_APPEND 。
使用 lseek 函数可以改变文件的 cfo 。
参数 whence 为下列其中一种:
SEEK_SET 参数offset 即为新的读写位置.
SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEEK_CUR 或 SEEK_END 时, 参数offet 允许负值的出现.
(6)
close(int fd)关闭文件

你可能感兴趣的:(嵌入式技术学习笔记(六))