Hỏi cách kiểm tra OS nào đang chạy trên máy

Em đang viết 1 chương trình đơn giản tính size của file. Em viết cách tính bằng 3 cách 1. viết theo ngôn ngữ C, 2. viết theo hệ điều hành linux, 3. viết theo hệ điều hành window! Viết theo link này: https://stackoverflow.com/questions/238603/how-can-i-get-a-files-size-in-c.
Em có 1 thắc mắc là khi em xem dung lượng size của file trên 1 hệ điều hành(không dùng cách 1) người dùng chọn cách 2 hoặc 3 thì làm sao để chương trình người dùng đang sài hệ điều hành nào nếu lỗi thì thông báo lỗi. Em cảm ơn mấy anh/chị.

#include <stdio.h>

#if defined(_WIN32) || defined(_WIN64)
        const char* os = "Windoze";
#else
#ifdef __linux
        const char* os = "Linux";
#else
        const char* os = "Unknown";
#endif
#endif

int main(void)
{
   printf("os = %s\n", os);
   return 0;
}
3 Likes

Cái này là khi tự chạy thì hệ điều hành sẽ cho mình biết mình đang sữ dụng hệ điều hành nào à anh? Anh có thể giải thích cho em được không?

Đây là macro do compiler nó tự định nghĩa sẵn, cứ theo đó mà làm thôi bạn

3 Likes

Cái trên là khi compile; compiler sẽ kiểm tra rằng hệ điều hành user đang chạy để compile là hệ điều hành gì từ đó sinh ra code tương ứng.

3 Likes

Cảm ơn anh em sẽ tìm hiểu thêm về macro stdio.h ! Cảm ơn anh nhiều!

Bạn hiểu nhầm rồi.stdio h.nó không liên quan đâu
Cái này nó do compiler tự định nghĩa

1 Like

Anh có thể cho em xin thêm link tìm hiểu thêm được không anh!

https://sourceforge.net/p/predef/wiki/OperatingSystems/

2 Likes

HI nghia.

  1. Khi bạn build trên win thì nó chỉ chạy cho win, linux thì nó chỉ chạy trên linux nên bạn không cần phải lo :
    “chương trình người dùng đang sài hệ điều hành nào nếu lỗi thì thông báo lỗi.”
  2. Nếu bạn muốn viết một code có thể build chạy được cả win và linux thì có thể dùng macro
    https://gcc.gnu.org/onlinedocs/gcc-3.0.1/cpp_3.html
    Tuy nhiên cái này là tiền biên dịch nên do trình biên dịch xử lý bạn cần tìm hiểu kỹ các trình biên dịch khác nhau định nghĩa macro khác nhau không và nếu cần thì thêm cả macro cho chình biên dịch nữa.
1 Like

Cảm ơn anh nhiều! em Chỉ có thể viết như thế thôi!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?