日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

        歡迎訪問 生活随笔!

        生活随笔

        當前位置: 首頁 > 运维知识 > linux >内容正文

        linux

        linux c 错误码大全及错误的捕获

        發布時間:2025/3/15 linux 62 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 linux c 错误码大全及错误的捕获 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

        經常在調用linux?系統api?的時候會出現一些錯誤,比方說使用open()?write()?creat()之類的函數有些時候會返回-1,也就是調用失敗,這個時候往往需要知道失敗的原因。這個時候使用errno這個全局變量就相當有用了。
        ????在程序代碼中包含?#include?<errno.h>,然后每次程序調用失敗的時候,系統會自動用用錯誤代碼填充errno這個全局變量,這樣你只需要讀errno這個全局變量就可以獲得失敗原因了。
        ????例如:

        sprintf 是輸出到串,一般是直接申請輸出到一個字符串中,這個可以用來將大量數字數據轉成字符串。
        fprintf 是輸出到文件,當然,這個文件也可能是虛擬的文件。
        printf 是直接輸出到標準顯示設備,就是屏幕的終端中。

        if () {fprintf(stderr, "把 socket '%d' 加入 epoll 失敗!%s\n", conn_sock, strerror(errno));exit(EXIT_FAILURE); } #include?<stdio.h> #include?<string.h> #include?<errno.h> int?main(void) {int?fd;extern?int?errno;if((fd?=?open("/dev/dsp",O_WRONLY))?<?0){printf("errno=%d\n",errno);}exit(0); }


        如果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()來自己翻譯
        如:

        #include?<stdio.h> #include?<string.h> #include?<errno.h> int?main(void) {int?fd;extern?int?errno;if((fd?=?open("/dev/dsp",O_WRONLY))?<?0){printf("errno=%d\n",errno);char?*?mesg?=?strerror(errno);printf("Mesg:%s\n",mesg);}exit(0); }


        dsp設備忙的話將輸出如下:
        errno=16
        Mesg:Device?or?resource?busy

        總結

        以上是生活随笔為你收集整理的linux c 错误码大全及错误的捕获的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。