2009-03-02 5 views
5

현재 커널 함수에서 주어진 경로명에 대한 inode를 얻으려고합니다. 내가 사용할 수있는 것은 전체 경로 이름뿐입니다. 나는 시도를 시도했다 :Linux 커널에서 inode 가져 오기 커널

user_path_at(AT_FDCWD, buffer, LOOKUP_FOLLOW, &path); 

그러나 주어진 경로에있는 덴 트리는 유효하지 않은 것으로 보인다. 그런 다음 아마도 stat()을 시도하고 그로부터 inode 수를 얻는다고 생각했습니다. 그러나, 그것은 구조체 아이 노드가 아니라 숫자 만 제공합니다. 기존의 inode를 잡고 inode의 전체 목록을 탐색하지 않고 inode 번호를 inode로 변환하는 방법을 모르겠습니다. 그리고 그게 효과가 있을지조차 모른다. 그러나 나는 확실히 그렇게하고 싶지 않습니다.

커널 내부의 char * 경로명에서 구조체 inode를 얻는 간단한 방법이 있습니까?

답변

0

struct inode가 커널의 일부이고 사용자 공간에 있기 때문에 쉬운 방법이 없습니다. 그것은 모두 특정 파일 시스템 구현에 달려 있습니다. 통계 구조체의 정보가 당신의 필요에 충분하지 않다고 확신합니까?

어쨌든 this link이 도움이 될 수 있습니다.

+1

단지 정보를 필요로하기 때문에 (약 3 시간 후) stat()이 내 요구에 충분할 것입니다. inode를 얻는 데 너무 지옥이되어서 내 목표를 부분적으로 잃어 버렸습니다. 그리고 저는 커널 안에서 이것을하고 있습니다. 따라서 stat()를 수행하는 것은 실제로 최적이 아니지만 수행 할 것입니다. –

+0

링크가 작동하지 않습니다. 이것이 링크 전용 답변이 나쁜 이유입니다. – MSalters

2

stat()은 "st_ino"필드에 파일의 inode를 제공합니다.

죄송합니다. 처음 질문에 대한 오해.

커널 내에서 실제 inode 구조를 원한다면 커널 자체가 배열이나 목록을 걷지 않을 것입니다 (목록이 매우 작지 않은 한). 커널에 대한 코드는 공개적으로 사용 가능하므로 어떻게 사용하는지 알아낼 수 있어야합니다.

+0

나는 이미 내 게시물에 언급했다. 그러나, 그것은 단지 파일에 대한 정보를 얻는 데 필요한 구조체 inode가 아니라 inode 번호를 제공합니다. –

관련 문제