2011-10-07 9 views
0

읽기 및 쓰기 기능을 위해 아카이브 (inode) 또는 파티션 (super_block)을 차단 (잠금) 및 차단 해제 (잠금 해제)하는 시스템 호출을 작성하는 방법을 알아야합니다.읽기 및 쓰기 시스템 호출을위한 파일 또는 파티션 잠금 파일

예 : 이러한 함수는 fs.h에 있습니다. lock_super (struct super_block *);
unlock_super (struct super_block *);

super_block (예 :/dev/sda1)을 구하는 방법은 무엇입니까?

답변

2

lock_super 및 unlock_super 호출은 사용자 수준 프로세스에서 직접 제어하기위한 것이 아닙니다. 이것은 파일 시스템상의 연산 (inode에 대한 연산)이 사용자 프로세스에 의해 호출 될 때 VFS 계층에 의해서만 호출되도록되어있다. 여전히 그렇게하고 싶다면 사용자 고유의 장치 드라이버를 작성하고 원하는 기능 (아이 노드 잠금 해제)을 사용자 수준에 노출시켜야합니다.

inode를 잠그고 잠글 수있는 현재 시스템 호출이 없습니다. 신중한 고려없이 새로운 시스템 호출을 구현하는 것이 현명하지 않은 많은 이유가 있습니다. 그러나 그렇게하고 싶다면 커널에 자신의 시스템 호출 핸들러를 작성해야한다. 그것은 당신이 파일 시스템을 미세하게 조정하고자하는 것 같습니다. 아마 사용자 수준의 파일 시스템을 구현하고있을 것입니다.

super_block을 얻는 방법은 모든 파일 시스템 모듈이 VFS (Virtual File System)에 등록됩니다. VFS는 사용자와 실제 파일 시스템 사이의 중간 계층 역할을합니다. 따라서 lock_super 및 unlock_super 메소드에 대한 함수 포인터를 알고있는 것은 VFS입니다. VFS 수퍼 블록은 "장치 정보"와 "파일 시스템 수퍼 블록에 대한 포인터 집합"을 포함합니다. 여기서 포인터를 가져 와서 호출 할 수 있습니다. 그러나 실제 파일 시스템은 VFS에 의해 관리되기 때문에 잠재적으로 데이터가 손상 될 수 있습니다.

+0

안녕하세요. 디바이스 드라이버에 대해 말씀하셨습니다. 시스템 호출에 대해 알고 싶습니다. 어떤 함수가 vfsmount 구조체를 반환하는지 알지 못합니다. 우리는 시스템 호출을 만들고 장치 드라이버를 만들고 싶지 않기 때문입니다. 시스템 호출을 통해 블록 (잠금) 및 차단 해제 (잠금 해제)하기 때문에 – Leonardo

+0

@ 레오나르도가 대답을 편집했습니다. – Harman