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);
驱动最终通过操作系统的文件操作系统调用或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);
相关文章推荐
- linux设备驱动学习第四天(linux文件系统与设备文件系统2)
- android驱动学习-sysfs文件系统设备--LED(3)
- linux驱动学习--第十天:第五章 Linux 文件系统与设备文件系统(四) 之 设备文件系统 devfs 和 udev
- 关于设备栈,IO栈,IO_STACK_LOCATION----文件系统过滤驱动学习收获
- Hasen的linux设备驱动开发学习之旅--使用文件私有数据的字符设备驱动
- Linux设备驱动开发详解-Note(11)--- Linux 文件系统与设备文件系统(3)
- linux驱动学习--第八天:第五章 Linux 文件系统与设备文件系统(二) 之 Linux 文件系统
- NuttX文件系统学习之关键数据结构及设备注册
- linux驱动学习--第九天:第五章 Linux 文件系统与设备文件系统(三) 之 file 结构体 和 inode 结构体
- linux设备驱动学习--proc文件系统
- 【Linux学习】Linux文件系统1--文件系统的目录结构
- Linux 学习笔记_9_文件系统管理_1_Linux文件系统构成
- Linux设备驱动开发详解-Note(9) --- Linux 文件系统与设备文件系统(1)
- linux设备驱动开发学习之旅--使用文件私有数据的字符设备驱动
- 20150517 Linux文件系统与设备文件系统
- linux驱动学习--第七天:第五章 Linux 文件系统与设备文件系统 之 linux文件操作
- linux文件系统与设备文件系统的关系?
- 5——linux文件系统与设备文件系统
- Linux设备驱动开发详解--笔记5--Linux文件与设备系统