Thuật ngữ kỹ thuật cho thư mục hiện tại (.) Và cha mẹ (..) là gì?


20

Tôi có một chức năng kiểm tra xem thông qua tên tệp là .hay ... Nhưng tôi không biết làm thế nào để đặt tên đúng. Một cái gì đó giống như IsCurrentOrParentDirectory()là mơ hồ, vì hàm lấy tên tệp chứ không phải là đường dẫn đầy đủ. (Theo trực giác, một lập trình viên đồng nghiệp sẽ mong đợi vượt qua /usr/trong khi tôi /usr/sẽ trở lại true, trong khi thực tế không phải vậy.)

Có một thuật ngữ kỹ thuật cho các mục thư mục? Nếu có một, nó là gì?


1
. và .. KHÔNG phải là tên tập tin, mà là các thư mục. Tại sao bạn không kiểm tra xem đầu vào có phải là tệp hợp lệ không (loại theo stat () là IF_REG)? PS Điều này có lẽ phù hợp hơn với StackOverflow
Tonny

7
@Tonny ... tên tệp theo tiêu chuẩn POSIX. Xem báo giá của tôi dưới đây. Tôi muốn nói rằng nó ổn ở đây vì nó là về các khái niệm điện toán nói chung.
slhck

Tôi phải thừa nhận rằng từ ngữ của tôi là mơ hồ một lần nữa. Chức năng mất một tập tin duy nhất hoặc tên thư mục ( foo.bar, foo, ...) nhưng không phải là một con đường ( foo/bar, /foo/, ...). Nhưng vì các thư mục, liên kết, vv cũng là các tập tin, tôi sẽ để nó như thế.
Max Truxa

@slhck POSIX gọi nó là một tệp, nhưng thực hiện điều đó cho BẤT K object đối tượng hệ thống tệp nào. Tệp trong thuật ngữ POSIX thường nên được đọc dưới dạng viết tắt của "đối tượng hệ thống tệp". Trong thời kỳ đầu Unix và nó bắt nguồn từ tất cả các FSO nơi thực sự là các tệp, nhưng điều đó không đúng với một số triển khai hiện đại và chắc chắn không phải đối với hệ điều hành không phải Unix, mà là hệ điều hành POSIX (Windows NT là ví dụ rõ ràng nhất). - Tôi có lẽ nên viết "là một tệp thông thường" thay vì "tệp hợp lệ" trong nhận xét của mình, nhưng nhận xét của Max Truxa làm cho nó trở thành một điểm cần thiết.
Tonny

Câu trả lời:


23

Từ tiêu chuẩn POSIX :

Dấu chấm tên tệp đặc biệt sẽ tham chiếu đến thư mục được chỉ định bởi người tiền nhiệm của nó. Tên tệp đặc biệt dot-dot sẽ tham chiếu đến thư mục mẹ của thư mục tiền thân của nó. Trong trường hợp đặc biệt, trong thư mục gốc, dấu chấm có thể tham chiếu đến chính thư mục gốc.

Vì vậy, thực sự, nếu bạn muốn kiểm tra xem tên tệp là .hay ..bạn sẽ phải gọi nó IsDotOrDotDot(), hoặc, bằng cách sử dụng thuật ngữ POSIX của độ phân giải tên đường dẫn IsPredecessorOrParentOfPredecessor(), hoặc thậm chí có thể PointsToPredecessorOrParentOfPrecedessor()bạn có ý tưởng. Vấn đề là thuật ngữ sau chỉ có ý nghĩa khi nhìn vào tên đường dẫn đầy đủ. Nhưng dù sao cũng không ai hiểu điều đó.

Xem xét rằng ...là tên tệp hợp lệ (chỉ được giải thích khác nhau), bạn chỉ nên bám vào những gì bạn có, dựa vào ý nghĩa hơn là cách chúng được gọi trong nội bộ.


.bash_historychấm hay không chấm? Tôi không chắc chắn nếu tên chức năng đó là mô tả nhiều hơn so với mở OP đề xuất.
Jens Erat

@JensErat Điều đó không liên quan đến vấn đề. Câu hỏi là liệu thành phần tên tệp là .hay không .., và liệu nó chỉ bắt đầu bằng a .. Tất nhiên tên chức năng của OP là mô tả nhiều hơn; Tôi chỉ chỉ cho anh ta cách nó được đề cập về mặt kỹ thuật.
slhck

2
Chắc chắn là như vậy, nhưng không IsDotOrDotDot()nói gì nhiều về chức năng đang làm gì cả.
Jens Erat

"tiền thân" đề cập đến phần tử đường dẫn ngay trước nó trong đặc tả đường dẫn. Nếu bạn chỉ nhìn vào tên của các mục trong một thư mục, "hiện tại" hoặc "cha mẹ" là thuật ngữ tốt hơn.
Simon Richter

2
@JensErat tôi sẽ sử dụng IsDotOrDotDot. Bất cứ ai am hiểu với các khái niệm hệ thống tập tin sẽ ngay lập tức hiểu nó. Người ta tranh cãi liệu có phải .bash_historylà chấm dot do vì không có ngữ cảnh nào được cung cấp sau đó với ý nghĩa của dấu chấm chấm, nhưng nó chắc chắn KHÔNG phải là dấu chấm hay dấu chấm chấm.
kinokijuf

4

...thường được sử dụng để mô tả các đường dẫn tương đối so với các đường dẫn tuyệt đối như /usr. Tôi sẽ sử dụng sự khác biệt này và khai báo hàm là IsRelativeCurrentOrParentDirectory().

Lưu ý rằng các tham chiếu dấu chấm có thể xảy ra ở bất cứ đâu trong đường dẫn. Thế còn /usr/local/..?


Tôi không thể chỉ ra rằng hàm chỉ lấy tên tệp chứ không phải đường dẫn đầy đủ. Tôi cập nhật câu hỏi cho phù hợp.
Max Truxa

2

Tiêu chuẩn POSIX, mà slhck ♦ trích dẫn một cách hữu ích, nói,

Dấu chấm tên tập tin đặc biệt sẽ đề cập đến đào.  Tên tập tin đặc biệt dot-dot sẽ tham chiếu đến.

(nhấn mạnh thêm). Vì vậy, mặc dù nó không chính xác về mặt kỹ thuật , nhưng có vẻ như tên tập tin đặc biệt của Wap có thể là tên chính thức . Người dùng của bạn có lẽ sẽ hiểu nó nếu bạn gọi là chức năng của bạn bất kỳ những điều sau đây: IsSpecialDirectory(), IsSpecialFilename(), hoặc đơn giản IsSpecialName().

Hoặc bạn có thể đi với IsStandardDirectory(), IsStandardFilename()hoặc IsStandardName(). Điều này tuân theo quy ước đặt tên Unix (đầu vào tiêu chuẩn, đầu ra tiêu chuẩn) cho những thứ được thiết lập cho bạn một cách tự động (trong trường hợp này, bởi mkfsmkdir).  IsAutomatic…()hoặc IsDefault…(), mặt khác, có lẽ không đủ trực quan.


Trên thực tế, cái tên đầu tiên tôi lấy IsMagicDirectory()rất gần với cái đó, nhưng tôi nghĩ cách diễn đạt của bạn trực quan và phù hợp hơn nhiều (đặc biệt là khi nó sử dụng các quy ước đặt tên đã được thiết lập). Việc sử dụng IsSpecialFileNamethậm chí sẽ làm rõ rằng hàm không nhận được một đường dẫn mà chỉ là một tên tệp (hoặc thư mục, liên kết, v.v.).
Max Truxa

Gợi ý tốt. "Đặc biệt" tuy nhiên có lẽ cũng sẽ bao gồm các liên kết, FIFO, v.v., phải không?
slhck

@slhck: Có, các thiết bị (ví dụ: đĩa và ttys) được gọi là các tập tin đặc biệt. Và, vâng, thuật ngữ này có thể được áp dụng một cách lỏng lẻo cho các liên kết tượng trưng, ​​FIFO và các từ chối kỳ lạ khác của hệ thống tệp - bất kỳ loại tệp (nút i) nào khác ngoài tệp tệp thông thường. (Vâng, các thư mục cũng rơi vào nhóm này.) Vì vậy, IsSpecialFile()đó sẽ là một gợi ý tồi. Nhưng tôi đã không đề nghị rằng; Tôi đề nghị IsSpecialFilename(). Trong khi những cái tên sda1, console, kmem, myfifourandomlà gợi ý, họ không dè dặt và không hẳn đã đặc biệt. Nhưng ...vốn là tên tập tin đặc biệt .
Scott

1

Thuật ngữ duy nhất tôi biết từ thế giới * nix là CWDdành cho Thư mục làm việc hiện tại. Điều đó thực sự khá thường xuyên được sử dụng. Xem, ví dụ /proc/$$/cwd, đó là một liên kết đến thư mục bạn chạy lệnh từ đó.

Tôi không biết bất kỳ tên tiêu chuẩn nào ..ngoài dot-dotvà như @slhck chỉ ra rằng đó không phải là một lựa chọn tốt.


0

Posix khá mơ hồ khi nói về mối quan hệ thư mục cha-con. Như những người khác đã nói, ./ ..không hữu ích trong khi nói chuyện hoặc giao tiếp với người khác.

Cấu trúc tệp có thể được coi là một cấu trúc dữ liệu cây. Ở đây, nói chung "cha mẹ" và "con" hoặc "con gái" là đủ để truyền đạt ý nghĩa. Bạn sẽ thấy sách giáo khoa cấu trúc dữ liệu thực hiện quy ước này

Ngoài ra, có vẻ như cây có thể được nói về "lên" và "xuống" cây. Theo quy ước, "lên" có nghĩa là gần hơn với thư mục gốc và "xuống" chỉ con (ren).

Tôi nghĩ một trong hai IsCurrentOrUp()hoặc IsCurrentOrParent()có thể được tranh luận là thực hành tốt cho việc đặt tên chức năng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.