inotify 또는 기타 액세스를 사용하여 열린 파일의 파일 설명자를 가로채는 방법은 무엇입니까?

inotify 또는 기타 액세스를 사용하여 열린 파일의 파일 설명자를 가로채는 방법은 무엇입니까?

저는 방금 대학에서 운영 체제 과정을 마쳤고 Rust를 사용하여 시스템 수준 프로그램을 가지고 놀고 싶습니다. 내가 찾고 있는 것 중 하나는 폴더에 열린 파일의 파일 설명자를 가로채서 그것이 가리키는 파일을 새 파일로 바꾸는 방법입니다. 나는 inotifyRust의 여러 도구와 상자를 사용하고 일부 시스템 호출을 직접 사용하여 이 문제를 해결할 수 있다고 생각 libc하지만 Linux 가상 파일 시스템을 이해하는 데 어려움을 겪고 있습니다. 명령어 등의 파일이 어떻게 find동작하는지, 파일이 어떻게 구성되어 있는지 정확하게 설명하는 책이 있나요 ? 소스 코드를 다운로드했지만 coreutilsLinux에서 파일 구조가 어떻게 보이는지 파악하는 데 문제가 있습니다. 책이나 리소스를 요청하는 것이 일부 규칙이나 항목에 위배된다는 것을 알고 있지만 커널과 유틸리티가 어떻게 함께 작동하는지에 대한 명확한 리소스를 찾을 수 없는 것 같습니다. 저는 Unix 기반 시스템을 사용하는 데 매우 익숙하지만 이제 막 오픈 소스 운영 체제 개발을 시작하고 있습니다. 나를 올바른 방향으로 안내하는 데 도움을 주시면 대단히 감사하겠습니다. 건배!

답변1

inotify귀하의 프로세스는 어떤 일이 발생했다는 경고만 받게 되며, 그런 다음 원격 파일, 창 내용을 동기화하고 바이러스 백신을 트리거하는 등의 작업을 수행할 수 있습니다. 프로세스가 열린 파일 설명자를 방해하는 것을 허용하지 않습니다. 가상 파일 시스템을 만드는 것이 더 가까운 방법일 수 있습니다. FUSE를 사용하면 사용자 프로세스에서 이를 구현할 수 있습니다. 이러한 파일 시스템은 파일 액세스를 받고 원하는 모든 작업을 수행할 수 있습니다. 가장 좋은 아이디어는 아마도 오픈 소스 예제를 가져와 분석하거나 튜토리얼(Google FUSE 파일 시스템 튜토리얼)을 여는 것입니다.

find일반적으로 각 디렉토리의 내용과 파일에 대한 일부 정보(필요할 수도 있음)를 가져오기 위해 시스템 호출을 opendir사용 하는 프로그램에는 inotify 또는 FUSE와 같은 고급 API가 필요하지 않습니다.readdirstat

"파일이 어떻게 구성되어 있나요?"라는 질문에 더 정확하게 답해야 합니다. 많은 시스템에서는 파일이 애플리케이션이 원하는 작업(읽기, 쓰기, 검색)을 수행하는 데 사용할 수 있는 바이트 스트림인 API를 공개합니다.

파일 시스템에 관한 질문인 경우 대답은 파일 시스템에 따라 다릅니다. FAT에서 각 디렉토리 항목은 해당 파일의 첫 번째 클러스터(고정 길이 블록 세트)를 가리키며 파일 할당 테이블은 어느 클러스터가 다음인지 나타냅니다. 일부 다른 파일 시스템은 각 범위(블록 번호 및 여러 블록)를 가리키는 B-트리 구조를 사용하여 더 복잡합니다. 바라보다https://en.m.wikipedia.org/wiki/B-tree좋은 운영 체제 책은 여기에 있는 일반적인 답변보다 훨씬 더 자세합니다. (일련의 기사가 있습니다: Google 1부에서 ext4 이해하기, 2부, ... 6부)

관련 정보