linux c 错误码大全及错误的捕获
經常在調用linux?系統api?的時候會出現一些錯誤,比方說使用open()?write()?creat()之類的函數有些時候會返回-1,也就是調用失敗,這個時候往往需要知道失敗的原因。這個時候使用errno這個全局變量就相當有用了。
????在程序代碼中包含?#include?<errno.h>,然后每次程序調用失敗的時候,系統會自動用用錯誤代碼填充errno這個全局變量,這樣你只需要讀errno這個全局變量就可以獲得失敗原因了。
????例如:
sprintf 是輸出到串,一般是直接申請輸出到一個字符串中,這個可以用來將大量數字數據轉成字符串。
fprintf 是輸出到文件,當然,這個文件也可能是虛擬的文件。
printf 是直接輸出到標準顯示設備,就是屏幕的終端中。
如果dsp設備忙的話errno值將是16。
errno.h中定義的錯誤代碼值如下:
查?看錯誤代碼errno是調試程序的一個重要方法。當linuc?C?api函數發生異常時,一般會將errno變量(需include?errno.h)賦一個整數值,不同的值表示不同的含義,可以通過查看該值推測出錯的原因。在實際編程中用這一招解決了不少原本看來莫名其妙的問題。比較?麻煩的是每次都要去linux源代碼里面查找錯誤代碼的含義,現在把它貼出來,以后需要查時就來這里看了。
以下來自linux?2.4.20-18的內核代碼中的/usr/include/asm/errno.h
#ifndef?_I386_ERRNO_H
#define?_I386_ERRNO_H
#define?EPERM?1?/*?Operation?not?permitted?*/
#define?ENOENT?2?/*?No?such?file?or?directory?*/
#define?ESRCH?3?/*?No?such?process?*/
#define?EINTR?4?/*?Interrupted?system?call?*/
#define?EIO?5?/*?I/O?error?*/
#define?ENXIO?6?/*?No?such?device?or?address?*/
#define?E2BIG?7?/*?Arg?list?too?long?*/
#define?ENOEXEC?8?/*?Exec?format?error?*/
#define?EBADF?9?/*?Bad?file?number?*/
#define?ECHILD?10?/*?No?child?processes?*/
#define?EAGAIN?11?/*?Try?again?*/
#define?ENOMEM?12?/*?Out?of?memory?*/
#define?EACCES?13?/*?Permission?denied?*/
#define?EFAULT?14?/*?Bad?address?*/
#define?ENOTBLK?15?/*?Block?device?required?*/
#define?EBUSY?16?/*?Device?or?resource?busy?*/
#define?EEXIST?17?/*?File?exists?*/
#define?EXDEV?18?/*?Cross-device?link?*/
#define?ENODEV?19?/*?No?such?device?*/
#define?ENOTDIR?20?/*?Not?a?directory?*/
#define?EISDIR?21?/*?Is?a?directory?*/
#define?EINVAL?22?/*?Invalid?argument?*/
#define?ENFILE?23?/*?File?table?overflow?*/
#define?EMFILE?24?/*?Too?many?open?files?*/
#define?ENOTTY?25?/*?Not?a?typewriter?*/
#define?ETXTBSY?26?/*?Text?file?busy?*/
#define?EFBIG?27?/*?File?too?large?*/
#define?ENOSPC?28?/*?No?space?left?on?device?*/
#define?ESPIPE?29?/*?Illegal?seek?*/
#define?EROFS?30?/*?Read-only?file?system?*/
#define?EMLINK?31?/*?Too?many?links?*/
#define?EPIPE?32?/*?Broken?pipe?*/
#define?EDOM?33?/*?Math?argument?out?of?domain?of?func?*/
#define?ERANGE?34?/*?Math?result?not?representable?*/
#define?EDEADLK?35?/*?Resource?deadlock?would?occur?*/
#define?ENAMETOOLONG?36?/*?File?name?too?long?*/
#define?ENOLCK?37?/*?No?record?locks?available?*/
#define?ENOSYS?38?/*?Function?not?implemented?*/
#define?ENOTEMPTY?39?/*?Directory?not?empty?*/
#define?ELOOP?40?/*?Too?many?symbolic?links?encountered?*/
#define?EWOULDBLOCK?EAGAIN?/*?Operation?would?block?*/
#define?ENOMSG?42?/*?No?message?of?desired?type?*/
#define?EIDRM?43?/*?Identifier?removed?*/
#define?ECHRNG?44?/*?Channel?number?out?of?range?*/
#define?EL2NSYNC?45?/*?Level?2?not?synchronized?*/
#define?EL3HLT?46?/*?Level?3?halted?*/
#define?EL3RST?47?/*?Level?3?reset?*/
#define?ELNRNG?48?/*?Link?number?out?of?range?*/
#define?EUNATCH?49?/*?Protocol?driver?not?attached?*/
#define?ENOCSI?50?/*?No?CSI?structure?available?*/
#define?EL2HLT?51?/*?Level?2?halted?*/
#define?EBADE?52?/*?Invalid?exchange?*/
#define?EBADR?53?/*?Invalid?request?descriptor?*/
#define?EXFULL?54?/*?Exchange?full?*/
#define?ENOANO?55?/*?No?anode?*/
#define?EBADRQC?56?/*?Invalid?request?code?*/
#define?EBADSLT?57?/*?Invalid?slot?*/
#define?EDEADLOCK?EDEADLK
#define?EBFONT?59?/*?Bad?font?file?format?*/
#define?ENOSTR?60?/*?Device?not?a?stream?*/
#define?ENODATA?61?/*?No?data?available?*/
#define?ETIME?62?/*?Timer?expired?*/
#define?ENOSR?63?/*?Out?of?streams?resources?*/
#define?ENONET?64?/*?Machine?is?not?on?the?network?*/
#define?ENOPKG?65?/*?Package?not?installed?*/
#define?EREMOTE?66?/*?Object?is?remote?*/
#define?ENOLINK?67?/*?Link?has?been?severed?*/
#define?EADV?68?/*?Advertise?error?*/
#define?ESRMNT?69?/*?Srmount?error?*/
#define?ECOMM?70?/*?Communication?error?on?send?*/
#define?EPROTO?71?/*?Protocol?error?*/
#define?EMULTIHOP?72?/*?Multihop?attempted?*/
#define?EDOTDOT?73?/*?RFS?specific?error?*/
#define?EBADMSG?74?/*?Not?a?data?message?*/
#define?EOVERFLOW?75?/*?Value?too?large?for?defined?data?type?*/
#define?ENOTUNIQ?76?/*?Name?not?unique?on?network?*/
#define?EBADFD?77?/*?File?descriptor?in?bad?state?*/
#define?EREMCHG?78?/*?Remote?address?changed?*/
#define?ELIBACC?79?/*?Can?not?access?a?needed?shared?library?*/
#define?ELIBBAD?80?/*?Accessing?a?corrupted?shared?library?*/
#define?ELIBSCN?81?/*?.lib?section?in?a.out?corrupted?*/
#define?ELIBMAX?82?/*?Attempting?to?link?in?too?many?shared?libraries?*/
#define?ELIBEXEC?83?/*?Cannot?exec?a?shared?library?directly?*/
#define?EILSEQ?84?/*?Illegal?byte?sequence?*/
#define?ERESTART?85?/*?Interrupted?system?call?should?be?restarted?*/
#define?ESTRPIPE?86?/*?Streams?pipe?error?*/
#define?EUSERS?87?/*?Too?many?users?*/
#define?ENOTSOCK?88?/*?Socket?operation?on?non-socket?*/
#define?EDESTADDRREQ?89?/*?Destination?address?required?*/
#define?EMSGSIZE?90?/*?Message?too?long?*/
#define?EPROTOTYPE?91?/*?Protocol?wrong?type?for?socket?*/
#define?ENOPROTOOPT?92?/*?Protocol?not?available?*/
#define?EPROTONOSUPPORT?93?/*?Protocol?not?supported?*/
#define?ESOCKTNOSUPPORT?94?/*?Socket?type?not?supported?*/
#define?EOPNOTSUPP?95?/*?Operation?not?supported?on?transport?endpoint?*/
#define?EPFNOSUPPORT?96?/*?Protocol?family?not?supported?*/
#define?EAFNOSUPPORT?97?/*?Address?family?not?supported?by?protocol?*/
#define?EADDRINUSE?98?/*?Address?already?in?use?*/
#define?EADDRNOTAVAIL?99?/*?Cannot?assign?requested?address?*/
#define?ENETDOWN?100?/*?Network?is?down?*/
#define?ENETUNREACH?101?/*?Network?is?unreachable?*/
#define?ENETRESET?102?/*?Network?dropped?connection?because?of?reset?*/
#define?ECONNABORTED?103?/*?Software?caused?connection?abort?*/
#define?ECONNRESET?104?/*?Connection?reset?by?peer?*/
#define?ENOBUFS?105?/*?No?buffer?space?available?*/
#define?EISCONN?106?/*?Transport?endpoint?is?already?connected?*/
#define?ENOTCONN?107?/*?Transport?endpoint?is?not?connected?*/
#define?ESHUTDOWN?108?/*?Cannot?send?after?transport?endpoint?shutdown?*/
#define?ETOOMANYREFS?109?/*?Too?many?references:?cannot?splice?*/
#define?ETIMEDOUT?110?/*?Connection?timed?out?*/
#define?ECONNREFUSED?111?/*?Connection?refused?*/
#define?EHOSTDOWN?112?/*?Host?is?down?*/
#define?EHOSTUNREACH?113?/*?No?route?to?host?*/
#define?EALREADY?114?/*?Operation?already?in?progress?*/
#define?EINPROGRESS?115?/*?Operation?now?in?progress?*/
#define?ESTALE?116?/*?Stale?NFS?file?handle?*/
#define?EUCLEAN?117?/*?Structure?needs?cleaning?*/
#define?ENOTNAM?118?/*?Not?a?XENIX?named?type?file?*/
#define?ENAVAIL?119?/*?No?XENIX?semaphores?available?*/
#define?EISNAM?120?/*?Is?a?named?type?file?*/
#define?EREMOTEIO?121?/*?Remote?I/O?error?*/
#define?EDQUOT?122?/*?Quota?exceeded?*/
#define?ENOMEDIUM?123?/*?No?medium?found?*/
#define?EMEDIUMTYPE?124?/*?Wrong?medium?type?*/
#define ECANCELED ??????125 ????/* Operation Canceled */
#define ENOKEY ?????????126 ????/* Required key not available */
#define EKEYEXPIRED ????127 ????/* Key has expired */
#define EKEYREVOKED ????128 ????/* Key has been revoked */
#define EKEYREJECTED ???129 ????/* Key was rejected by service */
/* for robust mutexes */
#define EOWNERDEAD ?????130 ????/* Owner died */
#define ENOTRECOVERABLE 131 ????/* State not recoverable */
#endif
同時也可以使用strerror()來自己翻譯
如:
dsp設備忙的話將輸出如下:
errno=16
Mesg:Device?or?resource?busy
總結
以上是生活随笔為你收集整理的linux c 错误码大全及错误的捕获的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十一、伪指令、数据类型、操作符
- 下一篇: (九)演员-评论员算法