inode_operations 소개

5092 단어

색인 노드inode 대상과 관련된 방법을 색인 노드 조작이라고 하는데, struct inodeoperations 구조체 설명, 이 구조의 주소는inode 구조체 영역 변수 i 에 저장됨op 필드에서 struct inodeoperations는 다음과 같이 구체적으로 설명합니다.
struct inode_operations {
	struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);
	void * (*follow_link) (struct dentry *, struct nameidata *);
	int (*permission) (struct inode *, int);
	struct posix_acl * (*get_acl)(struct inode *, int);

	int (*readlink) (struct dentry *, char __user *,int);
	void (*put_link) (struct dentry *, struct nameidata *, void *);

	int (*create) (struct inode *,struct dentry *,int, struct nameidata *);
	int (*link) (struct dentry *,struct inode *,struct dentry *);
	int (*unlink) (struct inode *,struct dentry *);
	int (*symlink) (struct inode *,struct dentry *,const char *);
	int (*mkdir) (struct inode *,struct dentry *,int);
	int (*rmdir) (struct inode *,struct dentry *);
	int (*mknod) (struct inode *,struct dentry *,int,dev_t);
	int (*rename) (struct inode *, struct dentry *,
			struct inode *, struct dentry *);
	void (*truncate) (struct inode *);
	int (*setattr) (struct dentry *, struct iattr *);
	int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
	int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
	ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
	ssize_t (*listxattr) (struct dentry *, char *, size_t);
	int (*removexattr) (struct dentry *, const char *);
	void (*truncate_range)(struct inode *, loff_t, loff_t);
	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
		      u64 len);
} ____cacheline_aligned;

이러한 방법은 모든 색인 노드와 파일 시스템에 사용할 수 있다.그러나 특정 인덱스 노드나 파일 시스템에 하위 세트 중 하나만 적용되고 구현되지 않은 메소드에 해당하는 필드는 NULL로 설정됩니다.
이러한 함수의 의미를 순차적으로 분석합니다.
    create(struct inode *,struct dentry *,int, struct nameidata *); 어떤 디렉터리에서 dentry 디렉터리 항목과 관련된 일반 파일을 위한 새 디스크 인덱스 노드를 만듭니다.
SYSCALL_DEFINE2(creat, const char __user *, pathname, int, mode)
{
	return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
}

sys_create
      |--sys_open
              |--do_filp_open
                        |--path_openat
                                      |--do_last
                                              |--vfs_create
                                                        |--dir->i_op->create(dir, dentry, mode, nd)
        lookup(struct inode *dir,struct dentry *, struct nameidata *); 색인 노드가 있는 디렉터리를 찾습니다. 이 색인 노드에 대응하는 파일 이름은dentry 디렉터리 항목에 포함됩니다.예컨대:dinode_lookup(),d_alloc_and_lookup()
 
        follow_link(struct dentry *, struct nameidata *); inode 인덱스 노드가 지정한 기호 체인 설명하기;기호 체인이 상대 경로 이름이면 지정된 dir 디렉토리부터 찾습니다.
 
        permission(struct inode *dir, int); inode 인덱스 노드가 가리키는 파일에 지정한 모드로 접근할 수 있는지 확인하십시오.
        get_acl(struct inode *, int);
 
        readlink(struct dentry *, char __user *,int); dentry가 지정한 기호체인에 대응하는 파일 경로 이름을 버퍼가 지정한 메모리로 복사합니다.
 
        put_link(struct dentry *, struct nameidata *, void *);
 
        link(struct dentry *,struct inode *,struct dentry *); 새 이름 new 만들기dentry 하드 링크, 이 새 하드 연결은dir 디렉터리에 있는old 를 가리킨다dentry 파일.
 
        unlink(struct inode *,struct dentry *); dir 디렉터리에서dentry 디렉터리 항목이 가리키는 파일의 하드 링크를 삭제합니다
 
        symlink(struct inode *,struct dentry *,const char *); 카탈로그에서 카탈로그 항목과 관련된 기호 체인에 대한 새 색인 노드를 생성합니다.
 
        mkdir(struct inode *,struct dentry *,int); 어떤 디렉터리에서 디렉터리 항목에 대응하는 디렉터리에 새 인덱스 노드를 만듭니다.
 
        rmdir(struct inode *,struct dentry *); 디렉토리에서 하위 디렉토리를 삭제합니다.하위 디렉터리의 이름은 디렉터리 항목 대상에 포함됩니다
 
        mknod(struct inode *,struct dentry *,int,dev_t); dir 디렉터리에서 디렉터리 항목의 대상과 관련된 특수 파일을 위한 새 디스크 인덱스 노드를 만듭니다.그 중에서 매개 변수 모드와 rdev는 각각 파일의 형식과 장치의 주 코드를 표시합니다.
 
        rename(struct inode *, struct dentry *, struct inode *, struct dentry *); olddir 디렉토리의 파일olddentry new 로 이동dir 디렉토리에 새 파일 이름이 new 에 포함됩니다.dentry가 가리키는 디렉터리 항목 중
 
        truncate(struct inode *); 색인 노드inode가 가리키는 파일의 길이를 수정합니다.이 방법을 사용하기 전에inode 대상의 i 를크기 필드가 필요한 새 길이 값으로 설정되었습니다.
 
        setattr(struct dentry *, struct iattr *); 디렉토리 항목의 등록 정보 설정
 
        getattr(struct vfsmount *mnt, struct dentry *, struct kstat *); 디렉토리 항목의 속성 가져오기
 
        setxattr(struct dentry *, const char *,const void *,size_t,int); 디렉터리 항목의 확장 속성을 설정합니다. (확장 속성은 색인 노드가 아닌 디스크 블록에 저장됩니다.)
 
        getxattr(struct dentry *, const char *, void *, size_t);
디렉터리 항목의 확장 속성 가져오기
 
        listxattr(struct dentry *, char *, size_t); 확장 속성 이름의 전체 체인 테이블 가져오기
 
        removexattr(struct dentry *, const char *); 색인 노드의 확장 속성 삭제
 
        truncate_range(struct inode *, loff_t, loff_t);
 
        fiemap(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);

좋은 웹페이지 즐겨찾기