inode_operations 소개
색인 노드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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.