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 등입니다.
답변이 없거나 질문을 닫은 경우 다시 질문하지 마십시오. 대신 사이트 규칙을 준수한다면 원본을 편집하고 다시 열어달라고 요청하십시오. See [ask]. – Olaf
Linux syscalls을 추가하는 것이 "ext2로 놀고 그 설계를 배우는"방법이 아닙니다. 그렇게하고 싶다면, ext2 파일 시스템을 이미지 파일로 처리하거나 블록 장치에 직접 액세스 할 수있는 독립형 유틸리티를 작성하십시오. 당신이하려고하는 것은 커널 *에서의 ext2 fs 구현을위한 커널 내부 프로그래밍 인터페이스입니다. * 이것은 커널 vfs 계층이 ext2가 작동하는 방식보다 어떻게 작동하는지와 관련이 있습니다. 그것은 유용한 운동이 아닙니다. –