현재 (.) 및 상위 (..) 디렉토리에 대한 기술 용어는 무엇입니까?


20

전달 된 파일 이름이 .또는 인지 확인하는 함수가 ..있습니다. 그러나 이름을 올바르게 지정하는 방법을 모르겠습니다. 같은 뭔가 IsCurrentOrParentDirectory()함수가 파일 이름이 아닌 전체 경로를 사용하기 때문에, 모호합니다. (직관적으로 동료 프로그래머는 /usr/내가 /usr/돌아 오는 동안 통과 할 것으로 예상 하지만 true실제로는 그렇지 않습니다.)

이러한 디렉토리 항목에 대한 기술적 용어가 있습니까? 하나가 있다면 무엇입니까?


1
. 및 ..은 파일 이름이 아니라 폴더입니다. 입력이 유효한 파일인지 확인하지 않는 이유는 무엇입니까 (stat ()에 따른 유형은 IF_REG입니다)? 추신 : 이것은 아마도 StackOverflow에 더 적합 할 것입니다
Tonny

7
@Tonny .하고 .. 있습니다 POSIX 표준에 따라 파일 이름. 아래 인용문을 참조하십시오. 일반적인 컴퓨팅 개념과 관련하여 여기서는 괜찮습니다.
slhck

나는 나의 말이 다시 모호하다는 것을 인정해야한다. 이 기능은 하나의 파일이나 디렉토리 이름 (소요 foo.bar, foo...)하지만 경로를 ( foo/bar, /foo/, ...). 그러나 디렉토리, 링크 등도 파일이기 때문에 그렇게 남겨 두겠습니다.
Max Truxa

@slhck POSIX는 파일을 호출하지만 모든 파일 시스템 객체에 대해 수행합니다. POSIX 용어의 파일은 일반적으로 "파일 시스템 개체"의 약어로 읽어야합니다. 초기 유닉스와 실제로는 실제로 파일이있는 모든 FSO를 파생 시키지만 일부 최신 구현에서는 사실이 아니며 확실히 유닉스가 아닌 POSIX 호환 운영 체제 (가장 명백한 예 인 Windows NT)에는 해당되지 않습니다. -내 의견에 "유효한 파일"대신 "일반 파일"이라고 적었을 수도 있지만 Max Truxa의 의견은 어쨌든 요점을 지적합니다.
Tonny

답변:


23

로부터 POSIX 표준 :

특수한 파일 이름 점은 이전 버전에서 지정한 디렉토리를 참조해야합니다. 특수 파일 이름 도트는 이전 디렉토리의 상위 디렉토리를 참조해야합니다. 특별한 경우, 루트 디렉토리에서 dot-dot는 루트 디렉토리 자체를 나타낼 수 있습니다.

따라서 실제로 파일 이름이 파일인지 .또는 ..호출 해야하는지 확인 IsDotOrDotDot()하거나 POSIX 경로 이름 확인 용어를 사용 IsPredecessorOrParentOfPredecessor()하거나 심지어는 PointsToPredecessorOrParentOfPrecedessor()… 문제는 후자의 용어가 전체 경로 이름을 볼 때만 의미가 있다는 것입니다. 그러나 아무도 그것을 이해하지 못했습니다.

점을 고려 .하고 ..(다만 다르게 해석) 유효한 파일 이름은, 당신은 단지에 의존, 당신이 무엇에 충실해야 의미 들이 내부적으로 호출하는 방법보다는.


.bash_history도트 인가 도트 인가 ? 해당 기능 이름이 OP가 제안한 공개보다 설명 적인지 확실하지 않습니다.
Jens Erat

@JensErat 그것은 문제와 관련이 없습니다. 문제는 파일 이름 구성 요소가 .또는로 ..시작했는지 여부가 아니라로 시작했는지 여부 .입니다. 물론 OP의 기능 이름은 더 설명 적입니다. 나는 그에게 기술적으로 어떻게 참조되는지 지적했습니다.
slhck

2
물론이지만 IsDotOrDotDot()기능이 수행하는 작업에 대해서는 거의 아무것도 말하지 않습니다.
Jens Erat

"선임자"는 경로 스펙에서 경로 요소 바로 앞에있는 경로 요소를 나타냅니다. 디렉토리의 항목 이름 만보고 있다면 "현재"또는 "부모"가 더 나은 용어입니다.
Simon Richter

2
@JensErat 내가 사용 IsDotOrDotDot합니다. 파일 시스템 개념에 정통한 사람은 즉시 그것을 이해할 것입니다. .bash_history"도트"의 의미에 대한 문맥이 제공되지 않기 때문에 "도트" 인지에 대해서는 논란의 여지 가 있지만, 반드시 "도트 또는 도트 도트"는 아니다.
kinokijuf

4

.그리고 ..일반적으로 절대 사람이 좋아하는 대 상대 경로를 설명하는 데 사용된다 /usr. 이 차이점을 사용하고 함수를로 선언합니다 IsRelativeCurrentOrParentDirectory().

점 참조는 경로의 어느 곳에서나 발생할 수 있습니다. 무엇에 대해 /usr/local/..?


함수가 전체 경로가 아닌 파일 이름 만 사용한다고 지적하지 못했습니다. 그에 따라 질문을 업데이트했습니다.
Max Truxa

2

유용하게 인용 된 POSIX 표준은 다음과 같이 말합니다.

특수한 파일 이름 점 은…을 참조해야합니다.  특수 파일명 도트 는…을 참조해야합니다.

(강조 추가). 따라서 정확히 기술적 인 것은 아니지만 “특수 파일 이름”처럼 보이는 것이 공식 이름 일 수 있습니다 . 사용자는 아마 당신이 함수는 다음 중 하나를 호출하는 경우를 이해할 : IsSpecialDirectory(), IsSpecialFilename(), 또는 단순히 IsSpecialName().

또는 당신은 함께 갈 수있다 IsStandardDirectory(), IsStandardFilename()또는 IsStandardName(). 이는 자동으로 설정되는 항목 (이 경우 mkfs및로 mkdir)에 대한 Unix 명명 규칙 (표준 입력, 표준 출력)을 따릅니다 .  IsAutomatic…()또는 IsDefault…(), 아마도 직관적이지 않을 수도 있습니다.


실제로 내가 취한 첫 번째 이름은 IsMagicDirectory()거의 비슷하지만, 당신의 표현이 훨씬 직관적이고 적절하다고 생각합니다 (특히 명명 된 명명 규칙을 사용하기 때문에). 를 사용 IsSpecialFileName하면 함수가 경로가 아니라 단일 파일 (또는 디렉토리, 링크 등) 이름을 수신한다는 것을 분명히 할 수 있습니다.
Max Truxa

좋은 제안. 그러나 "특별"은 아마도 링크, FIFO 등을 포함 할 것입니다.
slhck

@slhck : 예. 장치 (예 : 디스크 및 tty)를 "특수 파일"이라고합니다. 그렇습니다.이 용어는 심볼릭 링크, FIFO 및 기타 이국적인 파일 시스템 파일 ( "일반 파일"이외의 모든 유형의 파일 (i- 노드))에 느슨하게 적용될 수 있습니다. (예, 디렉토리도이 버킷에 포함됩니다.) IsSpecialFile()잘못된 제안이었을 것입니다. 그러나 나는 그것을 제안하지 않았다. 나는 제안했다 IsSpecialFilename(). 이름이 있지만 sda1, console, kmem, myfifourandom암시, 그들은 예약되지 본질적으로 특별한 아니다. 그러나 ...본질적으로 특별한 파일 이름 .
Scott

1

* nix 세계에서 내가 아는 유일한 용어는 CWD현재 작업 디렉토리입니다. 실제로는 자주 사용됩니다. 예를 들어 /proc/$$/cwd, 명령을 실행하는 디렉토리에 대한 링크입니다.

나는에 대한 표준 이름으로 모르는 ..떨어져에서 dot-dot와 @slhck는 지적이는 좋은 선택이 아니다.


0

Posix는 부모-자식 디렉토리 관계에 대해 매우 모호합니다. 다른 사람이 말했듯이, ./ ..이야기 또는 다른 사람과 통신하는 동안 도움이되지 않습니다.

파일 구조는 트리 데이터 구조로 생각할 수 있습니다. 여기서 일반적으로 "부모"및 "자식"또는 "딸"은 의미를 전달하기에 충분합니다. 데이터 구조 교과서에 이러한 규칙이 적용됩니다.

또는 나무가 나무의 "위"와 "아래"라고 말할 수있는 것처럼 보입니다. 일반적으로 "위"는 루트 디렉토리에 더 가까운 것을 의미하고 "아래"는 자식 (ren)을 나타냅니다.

나도 생각 IsCurrentOrUp()하거나 IsCurrentOrParent()기능을 명명 좋은 방법으로 주장 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.