Cả ISO C lẫn POSIX đều không cung cấp chức năng để xác định hệ điều hành bên dưới trong thời gian chạy. Từ quan điểm lý thuyết, nó không quan trọng vì C cung cấp hàm bao cho các cuộc gọi hệ thống phổ biến nhất, và từ quan điểm chọn nit, thậm chí không có là một hệ điều hành cơ bản.Xác định hệ điều hành trong thời gian chạy
Tuy nhiên, trong nhiều trường hợp trong thế giới thực, nó đã chứng tỏ hữu ích khi biết thêm về môi trường máy chủ lưu trữ hơn C sẵn sàng chia sẻ, ví dụ: để tìm nơi lưu trữ tệp cấu hình hoặc cách gọi số select()
, vì vậy:
Có cách nào thành ngữ cho ứng dụng được viết bằng C để xác định hệ điều hành cơ bản trong thời gian chạy không?
Ít nhất, tôi có thể dễ dàng quyết định giữa Linux, Windows, BSD và MacOS không?
Dự đoán hiện tại của tôi là kiểm tra sự tồn tại của các tệp/thư mục nhất định, chẳng hạn như C:\
hoặc /
, nhưng cách tiếp cận này có vẻ không đáng tin cậy. Có thể truy vấn một loạt các nguồn như vậy có thể giúp thiết lập khái niệm "dấu vân tay OS", do đó tăng độ tin cậy. Dù sao, tôi mong được đề xuất của bạn.
Er, bạn biết thông tin này tại thời gian biên dịch –
Làm thế nào để xác định hệ điều hành tại * runtime * giúp bạn viết một 'select()' gọi chính xác? –
+1, @David. Ít nhất là đối với những khác biệt như Linux so với Windows so với Mac OS X, vv Tôi đoán một cách chạy thời gian để phân biệt giữa các phiên bản khác nhau của mỗi phiên bản có thể là những gì OP đang tìm kiếm, nhưng câu trả lời cho điều đó sẽ cụ thể cho từng hệ điều hành, có lẽ là. –