2017-04-05 1 views
1

오픈 할 때 xattributes 파일을 읽는 모듈을 만들고 있습니다. 나는 sys_open을 구부리고이 때문에 파일을 열지 않고 파일의 dentry을 얻어야합니다. 간단히 말해 나는 inode과 절대 경로를 가지고 있지만 알아내는 데 어려움이 있습니다. 이들로부터 dentry을 얻는 방법. 모든 의견은 대단히 감사하겠습니다. 내 당신이 개방 콜백 함수 동안 드라이버 모듈에서 dentry 경로를 얻기 위해 노력하고있다 과소 당으로inode/pathname에서 dentry를 찾는 방법은 무엇입니까?

+0

http://stackoverflow.com/questions/8556461/how-to-obtain-a-pathname-or-dentry-or-struct-file-from-a-given-inode – ilansch

답변

2

. 그렇다면; 그런 다음 덴트 리 정보에 액세스하는 데 필요한 구조 목록을 추가하는 중입니다.

include/linux/fs.h

Struct file{ 
struct path    f_path; 
}; 

include/linux/path.h

struct path { 
      struct vfsmount *mnt; 
      struct dentry *dentry; 
    }; 

include/linux/dcache.h

struct dentry { 
}; 

이렇게 할 수 있습니다.

static int sample_open(struct inode *inode, struct file *file) 
    { 
    char *path, *dentry,*par_dentry; 
    char buff[256]; 
    dentry = file->f_path.dentry->d_iname; 
    pr_info("dentry :%s\n",dentry); 
    par_dentry = file->f_path.dentry->d_parent->d_iname; 
    pr_info("parent dentry :%s\n",par_dentry); 
    path=dentry_path_raw(file->f_path.dentry,buff,256); 
    pr_info("Dentry path %s\n",path); 
    } 
+0

우리는 실제로 dentry 구조체를 파일 경로에서 가져옵니다. 파일에 속한 덴트 리의 xattributes에 액세스하려면이 함수가 필요합니다. 우리는 덴 트리 경로 자체가 필요하지 않습니다. –

+0

@BenAtkinson 나는 이해하지 못했습니다. *** 당신이 의미하는 바는 dentry 구조를 얻습니다 ***. 'custom_structure-> mydent = file-> f_path.dentry; '와 같은 커스텀 함수로부터 덴트리스트 구조를 얻고 싶습니까? –

0

질문이 잘못되었습니다. 확장 속성은 inode에 저장되므로, inode를 가지고있는 한 액세스 할 수 있습니다.

나는 sys_open을 연결했기 때문에이 파일을 열지 않고 의 덴트리를 가져와야합니다.

2 개의 계정에서 잘못되었습니다.

  1. sys_open은 파일을 열 수있는 유일한 장소가 아닙니다.
,
  • 는 모든 장소에 푹 경우에도 수행 추가 조회 (CP FIL2 toopen 루프에서 CP 파일 1 toopen하고 고려 조커) 열려있어 것보다 다른 파일을 찾을 수 있습니다

    LSM 프레임 워크 (Linux 보안 모듈)를 사용하고 싶습니다. 특히 security_file_open을 참조하십시오.

    그러나 질문의 ​​품질을 감안할 때 나는 무엇에 대해 물어야합니다. 대학 프로젝트입니까? 나는 당신이 그것에 대해 준비 할 준비가되지 않았다고 주장 할 것이고 가능하다면 비핵적인 것으로 바꾸라고 제안 할 것이다.

  • 관련 문제