访问设备驱动程序的底层函数主要有:
open:打开文件或者设备。
read:从打开的文件或者设备里面读取数据。
write:向文件或者设备写数据。
close:关闭文件或者设备。
ioctl:把控制信息传递给设备驱动程序。(根据特定的硬件设备而不同)。
open系统调用:
#include
#include
#include
int open (const char *path, int oflags);
int open (const char *path, int oflags, mode_t mode);
path表示文件名,oflags用来定义准备对打开的文件进行操作的动作。
如果open调用成功,则返回一个新的文件描述符(非负整型);如果失败,就返回-1。
close系统调用:
#include
int close(int filedes);
成功返回0;出错返回-1;
read系统调用:
#include
size_t read(int filedes, const void *buf, size_t nbytes);< publishblog.blogchina.com http:>
将n个字节从文件描述符对应的文件读出放入到buf中。成功则返回实际的读取字节数。
write系统调用:
#include
size_t write(int filedes, const void *buf, size_t nbytes);
返回值是实际写入的字节数(可能会小于nbytes);如果返回值是0,表示没有写入任何数据;如果返回值是-1,表示在write调用中出错了。
将n个字节从buf中写入到文件描述符对应的文件中。
#define STDIN_FILENO 0
标准输入的文件描述符,如键盘输入read(0,buf,1 );
#define STDOUT_FILENO 1
标准输出的文件描述符 ,输出到显示屏 write(1,buf,1);
#define STDERR_FILENO 2
ioctl系统调用:
#include
int ioctl(int filedes, int cmd, ...);
ioctl对描述符filedes制定的对象执行在cmd中给出的操作。有时还会有可选的第三参数。
create系统调用:
#include
#include
#include
int creat(const char *pathname, mode_t mode);
若成功,返回为打开的文件描述符(该文件为只写);若出错,返回为-1。
lseek系统调用、fstat、stat、lstat系统调用、dup、dup2系统调用等不详细介绍
上述系统调用函数为非缓冲打开文件,不是标准C的函数,但是POSIX的组成部分。
fcntl系统调用对文件描述符进行操作,可以改变打开文件的性质;
如:应用中,read,write等为阻塞函数,但是应用 fcntl对文件描述符设成非阻塞
fcntl(flides,F_SETFL,O_NONBLOCK),设成非阻塞,即可使read,write在文件描述符对应的文件没有数据时,立即返回。
标准I/O库文件函数:
有fopen,fwrite,fread,fclose,fflush,fseek,fgets,getchar,fputs等系列的函数。他们与系统调用的一个主要的区别在于,这是带缓冲的函数,操作的对象不是int型的文件描述符,而是fopen返回的FILE型的文件指针(*fp).对应的标准输入,输出,出错为stdin,stdout,stderr文件指针。
另外,系统调用会影响系统性能,与函数调用相比,系统嗲用开销大些,其次,硬件会限制底层调用一次所能读写的数据块的大小。
阅读(1629) | 评论(0) | 转发(0) |