调用系统提供的函数接口

1、嵌入式Linux系统开发
(1)通过内核提供的服务实现相应功能
(2)用户空间不能随便访问内核空间
系统调用:内核提供的安全访问机制;硬件中断、软件中断
作用:使用户空间可以访问内核空间并获取服务
2、用户可以通过用户编程接口(API)来调用系统提供的函数接口
(1)creat 建立文件
需要包含的表头文件:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

定义函数
int fp=creat(const char *pathname,mode_t mode);
参数pathname指向欲建立的文件路径字符串。Creat()相当于使用下列调用方式调用open()
open(const char *pathname,(O_CREAT|O_WRONLY|O_TRUNC));

creat函数的返回值:若创建失败则返回‘-1’,因此可以用下列语句进行检测上面定义的fp
if(fp==-1)
{
printf(“fail to creat file\n”);
}
(2)open 打开文件
需要包含的表头文件:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
定义函数:
int fp=open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
参数pathname指向欲打开的文件路径字符串。下列是参数flags所能使用的标志:
O_RDONLY以只读方式打开文件
O_WRONLY以只写方式打开文件
O_RDWR 以可读写方式打开文件。
上述三种标志是互斥的,也就是不可同时使用
O_CREAT若欲打开的文件不存在则自动建立该文件。

open函数的返回值:若所有欲核查的权限都通过了检查则返回0值,表示成功,只要有一个权限被禁止则返回-1。因此可以用下列语句进行检测上面定义的fp
if(fp==-1)
{
printf(“fail to open file\n”);
}
(3)read 由一打开的文件读取数据
需要包含的表头文件:
#include<unistd.h>

定义函数:
ssize_t read(int fd, void *buf, size_t count);
read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则 read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或 是无可读取的数据,此外文件读写位置会随读取到的字节移动。

主要的用法是自己定义read函数:
下面是一个按每行每个字符进行读取数据的read函数
int read_line(int fp,char* buffer,int maxsize)
{
int I;
int r_len;
char temp;
for(i=0;i<maxsize;i++)
{
r_len=read(fp,&temp,1);
if(r_len== -1)
{
perror(“read data error”);
exit(1);
}
if( r_len == 0)
{
return 0;
}
if(temp==’\n’)
{
Break;
}
Buffer[i]=temp;
}
return i;
}

(4)write 将数据写入已打开的文件内
需要包含的表头文件:
#include<unistd.h>

定义函数:
ssize_t write(int fd, const void *buf, size_t count);
write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。

write函数的返回值:
如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno 中。

(5)close 关闭文件
需要包含的表头文件
#include<unistd.h>
当使用完文件后若已不再需要则可使用close()关闭该文件,close()会让数据写回磁盘,并 释放该文件所占用的资源。参数fd为先前由open()或creat()所返回的文件描述词。

利用定义的read_line函数来读取数据

调用系统提供的函数接口
调用系统提供的函数接口
调用系统提供的函数接口
调用系统提供的函数接口