2016-06-13 10 views
-1

ext2 파일 시스템에서 파일을 만드는 과정은 어떻게 생깁니 까?Ext2 - 파일 생성 방법

나는 경로를 취하고 주어진 파일과 같은 터치를 생성하는 간단한 syscall을 만들고자한다. 예를 들어

코드 :

int main(void) 
{ 
    syscall(MY_SYSCALL_NUMBER, "/tmp/file"); 
} 

가/tmp 디렉토리에서 "파일"라는 파일을 작성해야합니다.

이제 syscall 자체는 어떻게 작동해야합니까?

내 작품은 지금까지 (내가 여기 일기 좋게 검사 오류를 ommited) :

이 내가에 ls를 호출 할 때, 그러나 (내가 아이 노드가 할당 로그에 볼 수 있습니다) 작동하는 것 같다
asmlinkage long sys_ccp(const char __user *arg) 
{ 
    struct path path; 
    struct inode *new_inode; 
    struct qstring qname; 

    //ommited copy from user for simplicity 
    qname.name = arg; 
    qname.len = length(arg); 

    kern_path(src, LOOKUP_FOLLOW, &path); 
    new_inode = ext2_new_inode(path.dentry->d_parent->d_inode, S_IFREG, &qname); 
} 

디렉토리에서 파일을 볼 수 없습니다.

내 생각은 디렉토리의 struct dentry에 새로운 아이 노드를 추가 할 수 있었다, 그래서 나는이 코드를 추가 : 나는 ls을 사용하여 파일을 볼 수 없습니다 (이 여전히 작동하지 않는 것, 그러나

struct dentry *new_dentry; 

new_dentry = d_alloc(path.dentry->d_parent, &qname); 
d_instantiate(new_dentry, new_inode); 

을).

이 시스템 호출을 올바르게 구현하는 방법은 무엇입니까?

EDIT : 이 시스템 콜의 대답은 다음과 같습니다. ext2로 놀아서 디자인에 대해 배우므로 그 경로가 항상 유효하다고 가정 할 수 있습니다. 파일 시스템은 실제로 ext2 등입니다.

+0

답변이 없거나 질문을 닫은 경우 다시 질문하지 마십시오. 대신 사이트 규칙을 준수한다면 원본을 편집하고 다시 열어달라고 요청하십시오. See [ask]. – Olaf

+0

Linux syscalls을 추가하는 것이 "ext2로 놀고 그 설계를 배우는"방법이 아닙니다. 그렇게하고 싶다면, ext2 파일 시스템을 이미지 파일로 처리하거나 블록 장치에 직접 액세스 할 수있는 독립형 유틸리티를 작성하십시오. 당신이하려고하는 것은 커널 *에서의 ext2 fs 구현을위한 커널 내부 프로그래밍 인터페이스입니다. * 이것은 커널 vfs 계층이 ext2가 작동하는 방식보다 어떻게 작동하는지와 관련이 있습니다. 그것은 유용한 운동이 아닙니다. –

답변

1

관련된 추상화 레이어가 완전히 섞여 있습니다. 코드와 같은 것이 작동 할지라도 (실제로 가능한지는 확실하지 않은 경우), 누군가가이 시스템 호출을 실제로 발생하지 않은 경로에서 만들면 커널이 심하게 부 풀리거나 잘못된 코드 실행을 초래할 수 있습니다. ext2 파일 시스템에.

커널의 fs 추상화에서 기본 파일 시스템이 ext2 (또는 그 무엇이든)라는 사실은 파일을 만드는 작업과 관련이 없습니다. 오히려이 모든 것은 fs-type-agnostic 레이어를 거쳐야합니다.이 레이어는 경로에 마운트 된 fs 유형 백엔드를 사용합니다.

+0

또한 경로가 항상 ext2라고 가정합니다.이 기능이 작동하지 않는 이유와 작동 방법을 설명합니다. – Josh

+1

@Josh : "왜 이런 식으로 일하지 않을 것이고 어떻게 작동하게 할 수 있겠습니까?"- 같은 문장의 문장과 반대. 여기서 쓴 것을 읽었 니? – Olaf