Liunx FS 高层函数 Create/Open/Close/Read/Write

 

 

open.c

1. int sys_utime(char * filename, struct utimbuf * times) 

设置文件的access time , modified time

 

2. int sys_access(const char * filename,int mode)

判断当前用户是否有权限访问文件

 

3. int sys_chdir(const char * filename)

改变当前工作目录

命令cd

 

4. int sys_chroot(const char * filename)

改变当前工作目录为根目录root

 

5. int sys_chmod(const char * filename,int mode)

改变文件的mode

 

6. int sys_chown(const char * filename,int uid,int gid)

改变文件的属主

只有超级用户才有权限

 

7. int sys_open(const char * filename,int flag,int mode)

打开文件

fd.=open_namei(filename,flag,mode,&inode);

 f->f_mode = inode->i_mode;
 f->f_flags = flag;
 f->f_count = 1;
 f->f_inode = inode;
 f->f_pos = 0;

 

8. int sys_creat(const char * pathname, int mode)
{
 return sys_open(pathname, O_CREAT | O_TRUNC, mode);
}

 

9. int sys_close(unsigned int fd)

关闭文件

首先判断fd有效性

引用次数>1, 则减1

否则iput(filp->f_inode);

 

read_write.c

10.int sys_lseek(unsigned int fd,off_t offset, int origin)

重定位文件指针位置

origin指

0: 开头 file->f_pos=offset;

1:当前位置 file->f_pos += offset;

2:结束 file->f_pos = file->f_inode->i_size+offset

 

11. int sys_read(unsigned int fd,char * buf,int count)

读文件count字节到buf

管道: read_pipe(inode,buf,count);

字符设备:  rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos);

块设备: block_read(inode->i_zone[0],&file->f_pos,buf,count);

普通文件或目录: file_read(inode,file,buf,count);

 

12. int sys_write(unsigned int fd,char * buf,int count)

从buf中写count字节到文件fd中

sys_read();

 

 

 

你可能感兴趣的:(工作,struct,File,Access)