现在的位置: 首页 > 操作系统 > 正文

linux设备驱动学习第四天(linux文件系统与设备文件系统1)

2018年05月27日 操作系统 ⁄ 共 1724字 ⁄ 字号 评论关闭

        秉承“一切都是文件”的设计思想。

        驱动最终通过操作系统的文件操作系统调用或c库函数被访问,设备驱动的结构最终也是为了迎合提供给应用程序员的API。

一、通过linux API和c库函数在用户空间进行linux文件操作的编程方法

        文件操作系统调用

        ①创建

         int creat(const char *filename,mode_t mode); 参数mode指定新建文件的存取权限,它同umask一起决定文件的最终权限

         int umask(int newmask);  改调用将umask设置为newmask,返回旧的umask,它只影响读、写和执行权限。

         ②打开

         int open(const char *pathname,int flags);

         int open(const char *pathname,int flags,mode_t mode);

         ③读写

         int read(int fd,const void *buf,size_t length); buf为指向缓冲区的指针,length为缓冲区的大小(以字节为单位)。函数实现从文件描述符fd所指向的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节。

         int write(int fd,const void *buf,size_t length);  函数实现从buf所指向的缓冲区写入length个字节到文件描述符fd所指向的文件中中,返回值为实际写入的字节。

         ④定位

         int lseek(int fd,offset_t offset,int whence); 对于随机文件,我们可以随机的指定位置对文件进行读写。lseek()将文件读写指针相对whence移动offset个字节。操作成功时,返回指定文件指针相对于文件头的位置。参数whence可以使用以下值:

         SEEK_SET:相对文件开头

         SEEK_CUR:相对文件读写指针的当前位置

         SEEK_END:相对文件末尾

         offset可取负值

         ⑤关闭

         int close(int fd); 操作完成后,关闭文件。        

 

        C库文件操作

        ①创建和打开

        FILE *fopen(const char *filename,const char *mode); 打开指定文件filename,mode为打开模式

        ②读写

        c库函数支持字符、字符串为单位按照某种格式进行读写

        int fgetc(FILE *stream);

        int fputc(int c,FILE *stream);

        char *fgets(char *s,int n,FILE *stream);

        int fputs(const char *s,FILE *stream);

        int fprintf(FILE *stream,const char *format,...);

        int fscanf(FILE *stream,const char *format,...);

        size_t fread(void *ptr,size_t size,size_t n,FILE *stream); //此函数实现从流stream中读取n个字段,每个字段为size个字节,并将读取的字段放入ptr所指的字符数组中,返回时机已读取的字段数。可通过feof()和ferror()来判断函数调用时出现的错误。

        size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream); //此函数实现从缓冲区ptr所指的数组中把n个字段写入到流stream中,每个字段长为size个字节,返回实际写入的字段数。

       ③关闭

       int fclose(FILE *stream);

 

 

        

 

抱歉!评论已关闭.