今日学习目标:
初识嵌入式Linux开发:通过内核提供的服务实现相应功能
在我们之前所学习的C语言编程中,我们所学习的都是无os的语法,是因为之前我们所设计的东西都缺少操作系统,操作系统是可以用来管理资源的,不管是软件还是硬件。
Linux系统是由用户空间和内核空间构成,这样可以保护内核的访问安全,并且用户空间不能随便访问内核空间,但是通过系统调用(内核提供的安全访问机制),可以使用户空间可以访问内核空间并获取服务,即调用操作系统提供的函数接口(API)。所以后面的任务就是学习用户编程接口API的用法。在VM中输入man 语法即可查看函数用法。
其次是文件处理,在VM中,每个文件都有对应的ID,要调用文件就是调用文件ID,并且进行动态分配,就是当操作这个文件时,系统才会分配文件描述符,且这些ID都是非负数从3开始,因为0,1,2三个描述符有其他作用。在VM中无缓冲访问文件就是用系统调用,可以用函数来实现,如果想要了解该函数是什么作用,可以用man语法加上函数名来查询,并且man函数查找出来的头文件在后面运用该函数时也要加上这些头文件。
create函数是创建文件int creat(const char * pathname, mode_tmode);,open函数是打开文件int open(const char * pathname, int flags);int open(const char * pathname,int flags, mode_t mode);open函数有两种,可以有两个参数或者三个参数,其中O_RDONLY是以只读方式打开文件,O_WRONLY是以只写方式打开文件,O_RDWR是以可读写方式打开文件,且这三种命令互斥,不可以一起用。write函数是文件书写函数,read函数就是读取数据函数,与write函数的参数一致;lseek函数是控制读写位置函数,第二个参数如是负数,则往前移动,如是整数则往后移,SEEK-SET就是参数offset为新的读写位置,SEEK-CUR则是以目前的读写位置往后增加offset个位移量,SEEK-END就是将读写位置指向文件尾后再增加offset个位移量,后两者的第二个参数允许是负数。所以今天后面的学习就是将几个函数相互结合。