Linux 的文件操作系统调用(在Windows 编程领域,习惯称操作系统提供的接口
为API)涉及创建、打开、读写和关闭文件。

1.创建

int creat(const char *filename,mode_t mode);

mode指定新建文件的存取权限,umask代表文件在创建时需要去掉的一些存取权限。

int umask(int newmask);

2.打开

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

open()函数中,pathname是文件名,flag为O_RDONLY,OWRONLY,O_RDWR,

O_APPEND,O_CREAT,O_EXEC,O_NOBLOCK,O_TRUNC....MODE为访问权限

mode有S_IRUSR用户读,S_IWUSR用户写,S-IXUSR等

除了可以通过上述宏进行“或”逻辑产生标志以外,我们也可以自己用数字来表
示,Linux 总共用5 个数字来表示文件的各种权限:第一位表示设置用户ID;第二位
表示设置组ID;第三位表示用户自己的权限位;第四位表示组的权限;第五位表示其
他人的权限。每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无)或
者是这些值的和。

 

3.读写

int read(int fd,const void *buf,size_t length);

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

int open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);

4.定位

int lseek(int fd ,offset_t offset,int whence);

lseek()将文件读写指针相对whence移动offset个字节,成功返回文件指针相对文件头的位置

SEEK_SET:相对文件开头

SEEK_CUR:相对文件的当前位置

SEEK_END:相对文件末尾

当offset为负值时,表示向前移动

lseek(fd ,0,SEEK_END);返回文件的而长度

5,关闭int(int fd);

 

 

c库函数的文件操作

FILE *fopen( const char *path,const *mode);

其中mode为打开模式:r b ,w wb....b为二进制文件

2.读写

size_t fread(void *ptr,size_t size,size_t n,FILE *stream);

size_t write(void *ptr,size_t size,size_t n,FILE *stream);

fread()实现从stream中读取n 个字段,每个字段为size个字节,并将读取的字段
放入ptr 所指的字符数组中,返回实际已读取的字段数。在读取的字段数小于num时,
可能是在函数调用时出现错误,也可能是读到文件的结尾。所以要通过调用feof()和
ferror()来判断。
write()实现从缓冲区ptr 所指的数组中把n 个字段写到stream 中,每个字段长为
size个字节,返回实际写入的字段数。

3.关闭

int fclose(FILE *stream);

 

//buf为指向缓冲区的指针,length为缓冲区的大小,

 

devfs

1.可以通过程序初始化时在/dev目录下创建设备文件,卸载时将它删除。

2.设备驱动程序可以指定设备名,所有者和权限位,用户空间程序也可以修改。

3.不需要给设备程序分配主设备号以及此设备号,在程序中可以直接register_chardev()传递0主设备号以获得可用的主设备号,并在devfs_register()指定此设备号。

/*创建设备目录*/

devfs_handle_t devfs_mk_dir(devfs_handle_t dir,const char name,void *info);

/*创建设备文件*/

devfs_handle_t devfs_register(devfs_handle_t  dir,const char *name ,....);

/*撤销设备文件*/

void devfs_unregister(devfs_handle_t dev);

 

udev利用设备加入或是移除内核所发送的热插拔事件来工作。在热插拔时,设备详细的信息由netlink套接字来发送出来的。事件叫uevent.

 

posted on 2016-05-03 17:55  碧海蓝天88888888  阅读(136)  评论(0编辑  收藏  举报