
소프트 링크와 하드 링크가 파일에 대한 포인터인 경우.
그리고 파일 설명자는 열린 파일을 가리키는 파일 핸들입니다.
그렇다면 둘 다 파일에 대한 일종의 포인터라면 둘 사이의 정확한 차이점은 무엇입니까?
또한 하드 링크는 파일 내용의 주소 위치를 가리키고 파일 설명자도 파일 내용을 가리키며 여기서 정확히 다른 점은 다음과 같습니다. 또한 하드 링크에는 자체 파일 설명자가 있습니다.
답변1
철학적으로는 둘이 다르지 않다고 주장할 수도 있습니다.
그러나 왜, 어디서, 어떻게 사용되고 구현되는지는 완전히 다릅니다.
첫째, 하드 및 소프트/기호 링크는 모두 디렉토리 항목입니다. 즉, 디렉토리라는 특수 형식의 파일에 있는 항목/레코드입니다. 여기서 각 레코드는 이름과 inode 번호를 보유합니다. 후자는 파일의 메타데이터(권한, 크기 등)와 데이터 블록 목록("inode"라고 불리는 구조)입니다.
하드 링크와 심볼릭 링크의 차이점은 하드 링크가 가리키는 아이노드는 실제 데이터를 포함하는 반면 심볼릭 링크가 가리키는 아이노드는 다른 파일에 대한 경로를 포함한다는 것입니다. 기본적으로 심볼릭 링크는 그 자체입니다.딱딱한명명된 파이프, 유닉스 도메인 소켓 파일 등과 같은 특별한 종류의 파일을 가리키는 링크입니다.
이제 커널이 파일을 열면 디스크에서 inode를 복제하고 동일한 메타데이터(권한, 데이터가 포함된 블록 목록, 크기 등) 중 일부를 포함하는 메모리 내 구조를 생성합니다. 이 구조는 "열린 파일 설명"(위치 포인터, 파일이 읽기/쓰기 모드로 열렸는지 또는 읽기 전용 모드로 열렸는지, 비차단 모드로 읽고 써야 하는지 여부)이라는 다른 구조에 의해 가리킵니다. 모드 등). 마지막으로, 이 구조는 다른 커널(프로세스별) 구조의 항목인 파일 설명자 테이블이라는 배열/테이블에 의해 가리킵니다.
open(2)과 같은 시스템 호출에 의해 반환된 정수인 "파일 설명자"는 이 테이블에 대한 인덱스입니다.
메모리 내 inode는 여러 프로세스의 여러 파일 설명자가 가리킬 수 있는 여러 "열린 파일 설명"으로 가리킬 수 있습니다.
open(2)과 같은 일부 시스템 호출은 심볼릭 링크를 특별히 처리합니다. 열려는 파일이 심볼릭 링크로 판명되면 해당 내용인 경로로 명명된 파일을 열려고 계속 시도합니다.
디스크 구조(디렉터리, inode)와 커널/메모리 구조(inode, 열린 파일 설명) 모두 참조 계산을 사용하여 어느 것이 무엇을 사용하는지 추적합니다. (아니요, 커널에는 어떤 객체가 더 이상 다른 곳에서 참조되지 않는지 결정하기 위해 메모리나 디스크의 포인터를 통해 점프하는 표시 및 스윕 가비지 수집기가 없습니다 ;-)).