Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Hệ điều hành Unix] Phân tích cờ open()

    Phân tích tổ hợp cờ của open()

    Hàm open() nhận một tham số cờ là tổ hợp OR của nhiều hằng số bit. Trong bài này dùng các giá trị chuẩn của Linux (định nghĩa rõ trong chương trình, không phụ thuộc <fcntl.h> của máy):

    • Chế độ truy cập nằm ở 2 bit thấp, mặt nạ O_ACCMODE = 3:
      • O_RDONLY = 0, O_WRONLY = 1, O_RDWR = 2.
    • Các cờ độc lập (mỗi cờ một bit riêng):
      • O_CREAT = 0100 (octal) = 64
      • O_APPEND = 02000 (octal) = 1024
      • O_TRUNC = 01000 (octal) = 512

    Cho giá trị flags (thập phân) đã được OR sẵn theo các hằng số trên, hãy in:

    1. Chế độ truy cập: RDONLY, WRONLY hoặc RDWR (xét flags & O_ACCMODE).
    2. CREAT=1/CREAT=0.
    3. TRUNC=1/TRUNC=0.
    4. APPEND=1/APPEND=0.

    Ví dụ

    • flags = O_WRONLY | O_CREAT | O_TRUNC = 1 | 64 | 512 = 577.
    • Ra: WRONLY / CREAT=1 / TRUNC=1 / APPEND=0.
    • Định dạng đầu vào:

      Một dòng: số nguyên flags (thập phân) — tổ hợp OR theo các hằng số Linux nêu trên.

    • Ràng buộc đầu vào:

      flags là tổ hợp hợp lệ của các cờ nêu trên.

    • Định dạng đầu ra:

      Bốn dòng: chế độ truy cập, rồi CREAT=, TRUNC=, APPEND=.

    Ví dụ:

    Đầu vào:

    577
    

    Đầu ra:

    WRONLY
    CREAT=1
    TRUNC=1
    APPEND=0

    Giải thích:

    577 = 1|64|512 = O_WRONLY|O_CREAT|O_TRUNC.

    Đang tải editor...