Trên GNU / Linux, hai chế độ luôn tạo ra kết quả giống nhau
Vâng, rõ ràng. Từ man md5sum
:
Lưu ý: Không có sự khác biệt giữa tùy chọn chế độ nhị phân và chế độ văn bản trên hệ thống GNU [sic].
Đây là từ việc md5sum
triển khai các tàu với GNU coreutils 8.21; Tôi nhận thấy một phiên bản cũ hơn (8.12) không có thông báo này nhưng tôi cho rằng điều tương tự cũng sẽ đúng.
Mặc dù AFAICT md5sum
không được chuẩn hóa chính thức (ví dụ, bởi POSIX), nó có sẵn trên nhiều nền tảng khác nhau trong các triển khai khác nhau và rõ ràng có một số nỗ lực để làm cho các thiết bị này tuân thủ với nhau để dễ sử dụng trên các hệ thống.
Liên quan đến vấn đề này, Tiêu chuẩn ISO / ANSI C bao gồm các chức năng truyền phát mức cao để truy cập các tệp. Là một phần của tiêu chuẩn, chúng có sẵn trên bất kỳ hệ điều hành nào thực hiện ISO C thông qua thư viện dùng chung hoặc trình biên dịch. Vì hầu hết tất cả các hệ điều hành đều có sẵn điều này (và bản thân chúng thường được viết bằng C), đây là một loại ngôn ngữ phổ quát được sử dụng để triển khai phần mềm rất có khả năng di động.
Xem xét những gì nó làm, nó sẽ hoàn toàn khả thi để viết một md5sum
cái sẽ biên dịch và làm việc trên bất kỳ hệ điều hành nào. Tôi không khẳng định điều này đúng với phiên bản GNU coreutils, nhưng một trong những chức năng luồng tệp cấp cao được đề cập trước đó là fopen()
, được ISO C ủy quyền bao gồm một b
công tắc được sử dụng để mở tệp để cho biết nó đang được mở "dưới dạng nhị phân tập tin". Điều đó có thể có nghĩa là gì hoặc yêu cầu của hệ thống không được quy định bởi tiêu chuẩn, nó chỉ bắt buộc tồn tại để nó có thể được sử dụng trên hệ thống nơi có thể có một số ( bất kỳ ) lý do nào cho nó.
Không có lý do nào như vậy trên các hệ điều hành kiểu linux / POSIX / * nix, vì vậy việc chuyển đổi không làm gì cả. Từ thông số POSIX (siêu bộ của ISO C) cho fopen () :
Ký tự 'b' sẽ không có hiệu lực, nhưng được phép tuân thủ tiêu chuẩn ISO C.
Vì vậy, md5sum
việc triển khai hoàn toàn di động có thể sử dụng các hàm luồng tệp mức cao ISO, vì không có phương pháp nào khác để truy cập tệp trong ISO C (hầu hết các nền tảng, bao gồm cả các khiếu nại POSIX, cũng có các phương thức cấp thấp hơn, nhưng sử dụng các phương pháp này sẽ không thể mang theo được vì chúng không nằm trong ISO C) và nó cũng nên thực hiện các cờ -b
và -t
để thêm hoặc không thêm b
tùy chọn fopen()
khi nó đọc tệp. Trên các hệ thống mà điều đó là vô nghĩa, nó sẽ không tạo ra bất kỳ sự khác biệt nào.
Một lần nữa, tôi không nói rằng md5sum của GNU được viết theo cách hoàn toàn di động hoặc có nguồn gốc từ đó, nhưng rõ ràng là nó đang cố gắng tuân thủ, trong khả năng hoạt động của nó, với khả năng hoạt động của nó. Lưu ý rằng có một cờ không có gì không giống như không có cờ - trong trường hợp trước, nó được chỉ định là ổn nhưng không làm gì cả, trong trường hợp sau đó sử dụng nó có thể là một lỗi hoặc dẫn đến hành vi không xác định .