Tôi đang tự hỏi làm thế nào bạn làm hỏng phần cuối của tập lệnh / tập tin? Tôi đặc biệt quan tâm đến các phiên bản Unix cũ (như động cơ V6).
Có '\ 0' sau ký tự viết cuối cùng không?
Tôi đang tự hỏi làm thế nào bạn làm hỏng phần cuối của tập lệnh / tập tin? Tôi đặc biệt quan tâm đến các phiên bản Unix cũ (như động cơ V6).
Có '\ 0' sau ký tự viết cuối cùng không?
Câu trả lời:
Các chương trình người dùng trong các Unix thậm chí cũ hơn không thấy các byte "pad" ở cuối tệp. Tôi biết rằng MS-DOS hoặc CP / M sẽ lấp đầy các khối đĩa bằng các ký tự Ctrl-Z, do đó, không chỉ thuật toán đọc tệp phải kiểm tra các khối cuối đĩa, nó còn phải kiểm tra các byte đệm.
Unix không bao giờ làm điều đó. Các chương trình đọc byte cho đến khi điều kiện cuối tập tin xảy ra, đối với lệnh read(2)
gọi hệ thống có nghĩa là trả về 0. Đáng tiếc, một cuộc gọi hệ thống chạy dài có thể bị gián đoạn, điều này gây ra read()
trả về mã lỗi (-1) và ký hiệu toàn cục errno
đánh giá với EINTR, do đó, Unix cũng thường giới thiệu một số sự ngu ngốc khi đọc một số thiết bị nhất định.
Ngoài ra còn có một khía cạnh hệ thống tệp cho tất cả: Các hệ thống tệp Unix sẽ đưa dữ liệu vào các khối đĩa và giữ một giá trị kích thước tệp trong byte trong nút. Một số HĐH khác chỉ giữ kích thước tệp trong các khối. Nếu dữ liệu nhỏ hơn một khối, vấn đề sẽ nổi lên trong vùng người dùng, với các byte pad hoặc vô nghĩa khác.