您的位置:首页 > 运维架构 > Linux

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

2012-02-16 11:06 274 查看
秉承“一切都是文件”的设计思想。

驱动最终通过操作系统的文件操作系统调用或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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: