errno.h trong C

Header file có tên errno.h trong Thư viện C chuẩn định nghĩa biến nguyên errno, được thiết lập bởi system call (lời gọi hệ thống) và một số hàm thư viện về lỗi để chỉ rằng có lỗi đang xảy ra. Macro này là một sự mở rộng của kiểu int dạng lvalue có thể sửa đổi, vì thế nó có thể được đọc và được sửa đổi bởi một chương trình.

errno được thiết lập về 0 tại phần khởi động chương trình. Các hàm cụ thể của thư viện C chuẩn sửa đổi giá trị của nó về một số lớn hơn 0 để báo hiệu một số kiểu lỗi. Bạn cũng có thể sửa đổi giá trị của nó hoặc phục hồi nó về 0 tùy theo yêu cầu của bạn.

Header file có tên errno.h cũng định nghĩa một danh sách các macro để chỉ các mã lỗi khác nhau.

Các macro được định nghĩa trong errno.h

Bảng dưới liệt kê một số Macro được định nghĩa trong errno.h trong Thư viện C:

Macro Mô tả
extern int errno Đây là macro được thiết lập bởi system call và một số hàm thư viện về lỗi để chỉ rằng có lỗi đang xảy ra
EDOM Domain Error Macro này biểu diễn một domain error, mà xảy ra nếu một tham số đầu vào là ở bên ngoài miền mà hàm toán học đó được định nghĩa và errno được thiết lập là EDOM
ERANGE Range Error Macro này biểu diễn một range error, xảy ra nếu một tham số đầu vào là bên ngoài dãy giá trị mà hàm được định nghĩa, và errno được thiết lập là ERANGE

1. Macro errno trong C

Macro errno trong C

Macro extern int errno trong Thư viện C được thiết lập bởi system call và một số hàm thư viện về lỗi để chỉ rằng có lỗi đang xảy ra.

Khai báo Macro errno trong C

Dưới đây là phần khai báo cho errno macro trong C.

extern int errno

Tham số

macro này không nhận bất kỳ tham số nào

Trả về giá trị

macro này không trả về bất kỳ giá trị nào

Ví dụ

Chương trình C sau minh họa cách sử dụng của errno Macro trong C.

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main ()
{
   FILE *fp;

   fp = fopen("fileexample.txt", "r");
   if( fp == NULL ) 
   {
      fprintf(stderr, "Gia tri cua errno: %d\n", errno);
      fprintf(stderr, "Xay la loi khi mo file: %s\n", strerror(errno));
   }
   else 
   {
      fclose(fp);
   }
   
   return(0);
}

Biên dịch và chạy chương trình C trên trong trường hợp file.txt không tồn tại:

2. Macro EDOM trong C

Macro EDOM trong C

Macro EDOM trong Thư viện C biểu diễn một domain error, mà xảy ra nếu một tham số đầu vào là ở bên ngoài miền mà hàm toán học đó được định nghĩa và errno được thiết lập là EDOM.

Khai báo Macro EDOM trong C

Dưới đây là phần khai báo cho EDOM Macro trong C.

#define EDOM some_value

Tham số

macro này không nhận bất kỳ tham số nào

Trả về giá trị

macro này không trả về bất kỳ giá trị nào

Ví dụ

Chương trình C sau minh họa cách sử dụng của EDOM Macro.

#include <stdio.h>
#include <errno.h>
#include <math.h>

int main()
{
   double val;

   errno = 0;
   val = sqrt(-10);
   
   if(errno == EDOM) 
   {
      printf("Gia tri khong hop le \n");
   }
   else 
   {
      printf("Gia tri hop le\n");
   }
   
   errno = 0;
   val = sqrt(10);
   
   if(errno == EDOM) 
   {
      printf("Gia tri khong hop le\n");
   }
   else 
   {
      printf("Gia tri hop le\n");
   }
   
   return(0);
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả:

3. Macro ERANGE trong C

Macro ERANGE trong C

Macro ERANGE trong Thư viện C biểu diễn một range error, xảy ra nếu một tham số đầu vào là bên ngoài dãy giá trị mà hàm được định nghĩa, và errno được thiết lập là ERANGE.

Khai báo Macro ERANGE trong C

Dưới đây là phần khai báo cho ERANGE Macro trong C.

#define ERANGE some_value

Tham số

macro này không nhận bất kỳ tham số nào

Trả về giá trị

macro này không trả về bất kỳ giá trị nào

Ví dụ

Chương trình C sau minh họa cách sử dụng của ERANGE Macro.

#include <stdio.h>
#include <errno.h>
#include <math.h>

int main()
{
   double x;
   double value;

   x = 2.000000;
   value = log(x);
   
   if( errno == ERANGE ) 
   {
      printf("Log(%f) la ben ngoai day gia tri cua ham log\n", x);
   }
   else 
   {
      printf("Log(%f) = %f\n", x, value);
   }

   x = 1.000000;
   value = log(x);
   
   if( errno == ERANGE ) 
   {
      printf("Log(%f) la ben ngoai day gia tri cua ham log\n", x);
   }
   else 
   {
      printf("Log(%f) = %f\n", x, value);
   }
   
   x = 0.000000;
   value = log(x);
   
   if( errno == ERANGE ) 
   {
      printf("Log(%f) la ben ngoai day gia tri cua ham log\n", x);
   }
   else 
   {
      printf("Log(%f) = %f\n", x, value);
   }
   
   return 0;
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả: