Tôi vừa mới đọc về mode_t rằng nó về cơ bản lưu trữ các thông tin sau:Tại sao chế độ sử dụng 4 byte?
- 7 giá trị boolean cho các loại tập tin (S_IFREG, S_IFDIR, S_IFCHR, S_ISBLK, S_ISFIFO, S_ISLINK, S_ISSOCK)
- 3 * 3 = 9 giá trị boolean cho các giấy phép truy cập (đọc, viết và thực hiện cho chủ sở hữu, nhóm và những người khác)
Vì vậy, nó cần 16 bit = 2 byte. Tôi đoán bạn thậm chí có thể có một chút ít hơn cho các loại tập tin, vì nó phải là một tập tin thường xuyên, một thư mục, một nhân vật hoặc thiết bị khối, một ổ cắm, một liên kết tượng trưng, hoặc một đường ống. Hoặc các loại tệp khác tồn tại?
Vì vậy, tôi đã kiểm tra chỉ kích thước của mode_t với
printf("Size: %d byte\n", sizeof(mode_t));
Nó sử dụng 4 byte. Tại sao nó sử dụng 4 byte? Có thông tin bổ sung nào mà tôi không chú ý không?
chỉnh sửa: Tôi vừa mới phát hiện ra rằng mode_t được định nghĩa trong ptypes.inc:
type mode_t = cuint32;
cuint32 là 32 bit có kích thước, số nguyên unsigned và quy định tại ctypes.inc:
type cuint32 = LongWord;
Có lẽ điều này sẽ giúp cho câu trả lời.
nếu cần thêm tùy chọn/cờ vv trong tương lai thì sao? – Nim
Nó có thể là nó chỉ đơn giản là typedef'ed từ một 'int', đó là 32 bit trong hầu hết các kiến trúc. Hoặc nó được làm lớn hơn để nó có thể phù hợp với cờ trong tương lai. –
** ** của bạn ** loại _may_ được 4 byte ngay cả khi bạn lưu trữ trong nó số "255" ... "khối xây dựng" là kiến trúc bộ vi xử lý và hơn thế nữa bạn có một số không gian trống cho bất kỳ cờ nào khác nhu cầu. OMG Tôi ghét bitflags !!! –