저는 파일 시스템에 대해 배우고 있는데 디렉토리는 파일 inode 쌍 목록을 보유하는 일반 파일일 뿐이라고 합니다.
Downloads
다음 명령 중 하나를 사용하여 디렉터리를 열려고 하면 cat
less
tail
디렉터리이므로 열 수 없다는 메시지만 출력됩니다.
아이디어는 어떻게 읽히나요?
답변1
수정: 디렉토리는 파일 이름-inode 쌍의 목록입니다. "일반" 파일이 아닙니다. 기호 링크, 소켓 및 장치 노드와 마찬가지로 일반 파일과 다르게 동작합니다.
셸에서 매핑을 볼 수 있습니다 ls -i
.
C에서 반환된 구조에는 이 매핑을 볼 수도 있는 readdir()
a d_name
및 요소가 포함되어 있습니다.d_ino
사용자 공간에서 디렉토리가 파일 이름을 inode에 매핑한다는 사실은 일반적으로 그다지 중요하지 않습니다. 왜냐하면 커널에서는 어쨌든 파일 이름으로 파일을 지정해야 하기 때문입니다. inode 번호로 파일을 요청할 수 없습니다.
심볼릭 링크는 시스템 호출을 사용하여 접근할 수 없는 데이터(예 read()
: 일반 파일과 마찬가지로)를 포함하는 파일 유형의 또 다른 예입니다. 이 경우 데이터는 특별한 의미를 갖습니다. 이름을 지정하는 경로 이름입니다. 심볼릭 링크 대상(문자열입니다). 일반 파일과 달리 write()
with를 사용하여 내용을 쓰지 않으며, symlink()
with를 사용하여 내용을 읽습니다.read()
readlink()
답변2
디렉토리는 파일과 비슷하지만 커널은 디렉토리 항목을 열고, 읽고, 쓰는 특정 시스템 호출만 허용하여 액세스를 제한합니다. 다음은 C 함수 차이점의 몇 가지 예입니다.
File Directory
open() opendir()
read() readdir()
write() N/A
close() closedir()
답변3
또한 운영 체제에 따라 다릅니다. 구체적인 설명은 모르지만 이와 관련하여 Linux와 Unix 동작의 차이를 경험했습니다. 특히 FreeBSD에서는 cat
디렉토리를 사용할 수 있습니다 . 처음 시도했을 때 저를 버렸습니다.