/dev/zero

Bách khoa toàn thư mở Wikipedia

/dev/zero là một tập tin thiết bị trong các hệ điều hành tương tự Unix cung các ký tự rỗng (ASCII NUL, 0x00) khi cố gắng đọc dữ liệu từ nó.[1] Một trong những cách sử dụng điển hình là sử dụng nó để truyền một luồng ký tự khởi tạo bộ lưu trữ dữ liệu.[2]

Chức năng[sửa | sửa mã nguồn]

Các thao tác đọc từ /dev/zero trả về các ký tự rỗng (0x00) theo yêu cầu trong thao tác đọc.

Không như /dev/null, /dev/zero có thể được sử dụng như một nguồn chứ không chỉ là một nơi chứa dữ liệu. Tất cả các hoạt động ghi vào /dev/zero đều thành công mà không có tác động nào khác. Tuy nhiên /dev/null thường được sử dụng nhiều hơn cho mục đích này.

Khi /dev/zero được ánh xạ vào bộ nhớ, ví dụ: với mmap tới không gian địa chỉ ảo thì nó cũng giống như việc sử dụng bộ nhớ ẩn danh, tức là bộ nhớ không được liên kết với bất kỳ tập tin nào khác.

Lịch sử[sửa | sửa mã nguồn]

/dev/zero được giới thiệu vào năm 1988 bởi SunOS-4.0 để cho phép phân đoạn BSS có thể ánh xạ các thư viện dùng chung sử dụng bộ nhớ ẩn danh.[3] HP-UX 8.x đã giới thiệu cờ MAP_ANONYMOUS cho mmap(), cờ này ánh xạ trực tiếp bộ nhớ ẩn danh mà không cần mở /dev/zero.[4] Kể từ cuối những năm 1990 MAP_ANONYMOUS[5] hoặc MAP_ANON được hầu hết các phiên bản UNIX hỗ trợ thay thế cho mục đích ban đầu của /dev/zero.[6]

Ví dụ[sửa | sửa mã nguồn]

Tiện ích dd Unix đọc các luồng octet (bát phân) từ nguồn đến đích và có thể thực hiện chuyển đổi dữ liệu trong quá trình này. Hủy dữ liệu hiện có trên phân vùng hệ thống tập tin (định dạng cấp thấp):

dd if=/dev/zero of=/dev/<phân vùng đích>

Tạo 1 tập tin 1 MiB, gọi nó là foobar và đổ đầy các ký tự rỗng vào nó:[7]

dd if=/dev/zero of=foobar count=1024 bs=1024

Lưu ý: Giá trị kích thước khối có thể được cung cấp bằng giá trị SI (hệ thập phân), ví dụ: tính bằng GB, MB,... Để tạo tập tin 1 GB người ta chỉ cần nhập:

dd if=/dev/zero of=foobar count=1 bs=1GB

Ghi chú: Thay vì tạo một tập tin với kích thước 0 byte thì nhiều hệ thống tập tin cũng hỗ trợ tạo các tập tin thưa trả về số toàn số 0 khi đọc nhưng tốn ít không gian thực hơn.[8]

Xem thêm[sửa | sửa mã nguồn]

Tham khảo[sửa | sửa mã nguồn]

  1. ^ Mitchell, Mark; Oldham, Jeffrey; Samuel, Alex (2001), “6.5.2 /dev/zero”, Advanced Linux Programming, Sams Publishing, tr. 136, ISBN 9780735710436
  2. ^ Love, Robert (2007), “Mapping /dev/zero”, Linux System Programming: Talking Directly to the Kernel and C Library, O'Reilly Media, Inc., tr. 259–260, ISBN 9780596009588
  3. ^ "C" run-time program bootstrap from SunOS, contributed to CSRG for inclusion in 4.4BSD”. TUHS.
  4. ^ “HP-UX 8.0.7 install media”.
  5. ^ Beal, Chris. “So what the heck is anonymous memory”. Oracle Blog. Bản gốc lưu trữ ngày 15 tháng 4 năm 2021. Truy cập ngày 31 tháng 10 năm 2021.
  6. ^ “MAP_ANON description in mmap(2)”. NetBSD. Bản gốc lưu trữ ngày 25 tháng 11 năm 2019. Truy cập ngày 31 tháng 10 năm 2021.
  7. ^ Optimizing NFS Performance: Tuning and Troubleshooting NFS on HP-UX Systems, Dave (2002). Olker. Prentice Hall Professional. tr. 26–7. ISBN 9780130428165. Truy cập ngày 16 tháng 7 năm 2014.
  8. ^ Sparse file