Bagikan melalui


errno, _doserrno, _sys_errlist, dan _sys_nerr

Makro global yang menyimpan kode kesalahan yang diatur selama eksekusi program, dan string yang setara dengan kode kesalahan untuk ditampilkan.

Sintaks

#define errno   (*_errno())
#define _doserrno   (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())

Keterangan

Keduanya errno dan _doserrno diatur ke 0 oleh runtime selama startup program. errno diatur pada kesalahan dalam panggilan tingkat sistem. Karena errno menyimpan nilai untuk panggilan terakhir yang mengaturnya, nilai ini dapat diubah dengan berhasil memanggil. Panggilan pustaka run-time yang diatur errno pada kesalahan tidak dihapus errno saat berhasil. Selalu bersihkan errno_set_errno(0) dengan memanggil segera sebelum panggilan yang dapat mengaturnya, dan periksa segera setelah panggilan.

Pada kesalahan, errno tidak selalu diatur ke nilai yang sama dengan kode kesalahan yang dikembalikan oleh panggilan sistem. Untuk operasi I/O, _doserrno menyimpan kode kesalahan sistem operasi yang setara errno dengan kode. Untuk sebagian besar operasi non-I/O, nilai _doserrno tidak ditetapkan.

Setiap errno nilai dikaitkan dengan pesan kesalahan dalam yang dapat dicetak _sys_errlist dengan menggunakan salah perror satu fungsi, atau disimpan dalam string dengan menggunakan salah strerror satu fungsi atau strerror_s . Fungsi perror dan strerror menggunakan _sys_errlist array dan _sys_nerr—jumlah elemen dalam _sys_errlist—untuk memproses informasi kesalahan. Akses langsung ke _sys_errlist dan _sys_nerr tidak digunakan lagi karena alasan keamanan kode. Kami menyarankan agar Anda menggunakan versi fungsional yang lebih aman alih-alih makro global, seperti yang ditunjukkan di sini:

Makro global Setara fungsional
_doserrno _get_doserrno, _set_doserrno
errno _get_errno, _set_errno
_sys_errlist, _sys_nerr strerror_s, _strerror_s, _wcserror_s, __wcserror_s

Rutinitas matematika pustaka diatur errno dengan memanggil _matherr. Untuk menangani kesalahan matematika secara berbeda, tulis rutinitas Anda sendiri sesuai dengan _matherr deskripsi referensi dan beri nama _matherr.

Semua errno nilai adalah konstanta yang telah ditentukan sebelumnya di <errno.h>, dan kompatibel dengan UNIX. Hanya ERANGE, EILSEQ, dan EDOM ditentukan dalam standar ISO C99. Untuk daftar lengkapnya, lihat errno konstanta.

Persyaratan

Makro global Header yang diperlukan Header opsional
errno <errno.h> atau <stdlib.h>, <cerrno> atau <cstdlib> (C++)
_doserrno, _sys_errlist, _sys_nerr <stdlib.h>, <cstdlib> (C++) <errno.h>, <cerrno> (C++)

Makro _doserrno, _sys_errlist, dan _sys_nerr adalah ekstensi Microsoft. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Baca juga

Variabel global
errno Konstanta
perror, _wperror
strerror, _strerror, _wcserror, __wcserror
strerror_s, _strerror_s, _wcserror_s, __wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno