저는 방금 대학에서 운영 체제 과정을 마쳤고 Rust를 사용하여 시스템 수준 프로그램을 가지고 놀고 싶습니다. 내가 찾고 있는 것 중 하나는 폴더에 열린 파일의 파일 설명자를 가로채서 그것이 가리키는 파일을 새 파일로 바꾸는 방법입니다. 나는 inotify
Rust의 여러 도구와 상자를 사용하고 일부 시스템 호출을 직접 사용하여 이 문제를 해결할 수 있다고 생각 libc
하지만 Linux 가상 파일 시스템을 이해하는 데 어려움을 겪고 있습니다. 명령어 등의 파일이 어떻게 find
동작하는지, 파일이 어떻게 구성되어 있는지 정확하게 설명하는 책이 있나요 ? 소스 코드를 다운로드했지만 coreutils
Linux에서 파일 구조가 어떻게 보이는지 파악하는 데 문제가 있습니다. 책이나 리소스를 요청하는 것이 일부 규칙이나 항목에 위배된다는 것을 알고 있지만 커널과 유틸리티가 어떻게 함께 작동하는지에 대한 명확한 리소스를 찾을 수 없는 것 같습니다. 저는 Unix 기반 시스템을 사용하는 데 매우 익숙하지만 이제 막 오픈 소스 운영 체제 개발을 시작하고 있습니다. 나를 올바른 방향으로 안내하는 데 도움을 주시면 대단히 감사하겠습니다. 건배!
답변1
inotify
귀하의 프로세스는 어떤 일이 발생했다는 경고만 받게 되며, 그런 다음 원격 파일, 창 내용을 동기화하고 바이러스 백신을 트리거하는 등의 작업을 수행할 수 있습니다. 프로세스가 열린 파일 설명자를 방해하는 것을 허용하지 않습니다. 가상 파일 시스템을 만드는 것이 더 가까운 방법일 수 있습니다. FUSE를 사용하면 사용자 프로세스에서 이를 구현할 수 있습니다. 이러한 파일 시스템은 파일 액세스를 받고 원하는 모든 작업을 수행할 수 있습니다. 가장 좋은 아이디어는 아마도 오픈 소스 예제를 가져와 분석하거나 튜토리얼(Google FUSE 파일 시스템 튜토리얼)을 여는 것입니다.
find
일반적으로 각 디렉토리의 내용과 파일에 대한 일부 정보(필요할 수도 있음)를 가져오기 위해 시스템 호출을 opendir
사용 하는 프로그램에는 inotify 또는 FUSE와 같은 고급 API가 필요하지 않습니다.readdir
stat
"파일이 어떻게 구성되어 있나요?"라는 질문에 더 정확하게 답해야 합니다. 많은 시스템에서는 파일이 애플리케이션이 원하는 작업(읽기, 쓰기, 검색)을 수행하는 데 사용할 수 있는 바이트 스트림인 API를 공개합니다.
파일 시스템에 관한 질문인 경우 대답은 파일 시스템에 따라 다릅니다. FAT에서 각 디렉토리 항목은 해당 파일의 첫 번째 클러스터(고정 길이 블록 세트)를 가리키며 파일 할당 테이블은 어느 클러스터가 다음인지 나타냅니다. 일부 다른 파일 시스템은 각 범위(블록 번호 및 여러 블록)를 가리키는 B-트리 구조를 사용하여 더 복잡합니다. 바라보다https://en.m.wikipedia.org/wiki/B-tree좋은 운영 체제 책은 여기에 있는 일반적인 답변보다 훨씬 더 자세합니다. (일련의 기사가 있습니다: Google 1부에서 ext4 이해하기, 2부, ... 6부)