在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

有關文件IO操作的錯誤(error)提示

冬至子 ? 來源:嵌入式之入坑筆記 ? 作者:嵌入式之入坑筆記 ? 2023-05-20 16:31 ? 次閱讀

編程中,我們一般都是要講究一定的使用規范的。按照一定的規范編寫代碼,返回運行提示,在代碼運行出現問題時能方便我們能快速的定位到問題的所在。

特別是在使用庫函數或者系統調用的API的時候,我們最好也要關注函數的返回值所能給我們提供的信息,充分利用好這些返回值以及返回值所代表的含義,對我們的錯誤查找是有很大的便利的!

本文記錄一下文件IO操作時的一些錯誤提示,通過函數的調用之后的返回值去查找對應的問題。

有關文件IO的 errno 變量

linux系統中對于常見的錯誤都進行了統計,這些不同的錯誤已經被系統進行了編號,并且每個錯誤類型的編號都不一樣,以此來區分不同的錯誤類型。

errno實際上是一個int型的全局變量,它存儲的是當前執行函數所發生的錯誤編號,如果這個錯誤在被記錄時沒有被及時的訪問,那么會被下一次發生的錯誤編號所覆蓋掉。

但是有一點是要注意的,不是所有的庫函數或者系統調用都會有錯誤碼返回的,關于這邊要去查詢所調用的函數說明才能知道。比如我想知道函數 open 是否會返回錯誤碼,那就可以使用 man 2 open 進行查看,如下:

圖片

從圖中可以看出,open函數在調用出現異常的時候會設置errno變量的。

C庫函數 strerror( )

雖然我們知道了通過errno變量可以獲取到函數調用出現錯誤時的錯誤編號。但是錯誤編號它只是一個數字,對于我們而言光是知道一個數字總歸是差點意思的。

而我們最終是希望通過這個數字獲取到有關的錯誤原因或者某種提示,這才是我們查找問題的好幫手啊。

這個時候我們可以考慮使用一個C庫函數— strerror()。通過這個函數將我們代碼中獲取到的錯誤編碼轉換成對應的字符串輸出,讓我們能夠看的明白錯誤是怎么回事。

strerror()函數的原型如下:

#include 


char*strerror(int errnum);



參數和返回值如下:


errnum :錯誤編號 errno。


返回值:對應錯誤編號的字符串描述信息。

比如:我調用open函數以只讀的方式打開一個不存在的文件,并打印變量errno的值,然后轉換成字符串輸出,看看是什么效果。

代碼如下:


#include


#include


#include


#include


#include


#include


#include



intmain(void)


{


char buf[1024];


int fd_src;



fd_src =open("./xxxx.txt",O_RDONLY);


if(fd_src <0)


{


printf("errno:%d Info:%s\\r\\n",errno,strerror(errno));


return-1;


}


close(fd_src);


}

運行之后的輸出結果如下:

圖片

從圖上可以看出來,因為xxxx.txt這個文件是不存在的,用open函數的只讀的方式打開的話,會返回錯誤編號2,通過strerror函數返回的錯誤信息是“No such file or directory”,說的是找不到這個文件。

當然,除了strerror函數之外,還有一個函數也是實現一樣的效果的,那就是perror,這個函數會自動附加一些信息輸出,可以更加方便我們輸出調試查看信息!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux系統
    +關注

    關注

    4

    文章

    594

    瀏覽量

    27441
  • 字符串
    +關注

    關注

    1

    文章

    584

    瀏覽量

    20552
收藏 人收藏

    評論

    相關推薦

    文件IO操作時的常見錯誤

    在編程中,我們一般都是要講究一定的使用規范的。按照一定的規范編寫代碼,返回運行提示,在代碼運行出現問題時能方便我們能快速的定位到問題的所在。
    發表于 01-11 15:36 ?1271次閱讀
    <b class='flag-5'>文件</b><b class='flag-5'>IO</b><b class='flag-5'>操作</b>時的常見<b class='flag-5'>錯誤</b>

    makefile文件出現錯誤提示 求解

    我在編譯簡單的驅動程序框架時makefile文件出現cc1: error: invalid option `abi=apcs-gnu'錯誤提示。大家看下怎么回事啊?makefile
    發表于 03-18 10:17

    用primace測試vhd文件提示錯誤的解決辦法?

    Error:CMD_ERR_033: Cannot find current_design 'XZJ'! 用primace測試vhd文件提示如下錯誤
    發表于 06-16 09:03

    硬盤故障提示

    硬盤故障提示 (1)Date error(數據錯誤) 從軟盤或硬盤上讀取的數據存在不可修復錯誤,磁盤上有壞扇區和壞的文件分配
    發表于 01-08 09:37 ?1598次閱讀

    電腦錯誤信息的中文解讀

    電腦各種錯誤信息的中文意思 一、BIOS中的提示信息 提示信息 說明 Drive A error 驅動器A錯誤 System halt 系統
    發表于 02-11 17:32 ?762次下載

    Bada系統學習-錯誤碼(Error Codes)

    of an error code下表描述了錯誤碼的詳情? Table: Error codes Error code
    發表于 04-02 14:35 ?599次閱讀

    STM32F1的ADC2如何使用DMA功能 USART過載錯誤Overrun error

    STM32F1的ADC2如何使用DMA功能,USART過載錯誤Overrun error
    的頭像 發表于 03-14 14:42 ?8143次閱讀
    STM32F1的ADC2如何使用DMA功能 USART過載<b class='flag-5'>錯誤</b>Overrun <b class='flag-5'>error</b>

    【MCU】MDK錯誤error in include chain (cmsis_armcc.h):expected identifier or ‘(‘

    【MCU】MDK錯誤error in include chain (cmsis_armcc.h):expected identifier or ‘(‘
    發表于 11-30 19:51 ?18次下載
    【MCU】MDK<b class='flag-5'>錯誤</b>:<b class='flag-5'>error</b> in include chain (cmsis_armcc.h):expected identifier or ‘(‘

    Keil編譯時提示“main.c(16): error C129: missing ';' before 'num'”

    Keil編譯時提示“main.c(16): error C129: missing ‘;’ before ‘num’”折騰了很久才知道是前面的“typedef unsigned char u8
    發表于 12-17 18:10 ?16次下載
    Keil編譯時<b class='flag-5'>提示</b>“main.c(16): <b class='flag-5'>error</b> C129: missing ';' before 'num'”

    error:expected identifier before ‘(‘ token,結構體指針宏定義錯誤

    error:expected identifier before ‘(’ token,結構體指針宏定義錯誤編譯時彈出標題所示錯誤,一般為宏定義里有與其他地方重復的常量符號。找出名字重復的符號并修改
    發表于 01-13 15:42 ?11次下載
    <b class='flag-5'>error</b>:expected identifier before ‘(‘ token,結構體指針宏定義<b class='flag-5'>錯誤</b>

    Linux下文件IO相關操作

    Linux - 基礎 IO 文件 IO 相關操作 stdin stdout stderr 系統文件 I/O
    發表于 08-11 11:55 ?514次閱讀

    pip安裝時 fatal error C1083 無法打開包括文件io.h” No such file or directory

    原文鏈接 報錯 使用pip安裝模塊,出現錯誤: c:\\users\\anaconda3\\include\\pyconfig.h(68): fatal error C1083: 無法打開包括文件
    的頭像 發表于 01-12 11:24 ?3514次閱讀

    嵌入式Linux學習筆記:文件IO

    在linux中一切都叫文件,比如普通文件,設備文件,管道。在應用層,可以用一套文件IO讀寫文件
    發表于 06-23 14:25 ?307次閱讀
    嵌入式Linux學習筆記:<b class='flag-5'>文件</b><b class='flag-5'>IO</b>

    a javascript error怎么修復

    修復"a javascript error"的方法可以因情況而異,但以下是一些常見的解決方法: 檢查錯誤消息 首先,查看瀏覽器控制臺中的錯誤消息。錯誤消息通常會提供
    的頭像 發表于 11-26 14:41 ?5179次閱讀

    linux打開文本文件命令提示錯誤

    Linux中打開文本文件的命令通常是使用文本編輯器打開,例如常用的命令有 vi 、 vim 、 nano 等。如果在使用其中一個命令時出現錯誤提示,可能有以下幾種原因和解決方法。 錯誤
    的頭像 發表于 12-22 15:10 ?866次閱讀
    主站蜘蛛池模板: 欲香欲色天天综合和网| 男人j进入女人j视频大全| 亚洲一区二区在线视频| 狠狠干夜夜骑| 一级特黄a视频| 日韩精品一区二区在线观看| 网站毛片| 色站视频| 免费两性的视频网站| 精品视频卡1卡2卡3| 色多多成视频人在线观看| 久久久久久午夜精品| xxxx欧美xxxx黑人| 69日本xxxxxxxxx98| 免费看男女做好爽好硬视频| 在线观看你懂的视频| 婷婷射| 日韩免费视频一区| 久久国产乱子伦精品免| 丁香午夜婷婷| 奇米影视四色7777| 欧美性白人极品1819hd高清| 国产精品久久久久久久牛牛| 99久久香蕉国产综合影院| 亚洲一在线| 性欧美成人免费观看视| 欧美日韩亚洲国产一区二区综合| 久九色| 天天综合网天天做天天受| 寂寞午夜影院| 91av在线免费观看| 亚洲伊人久久网| 亚欧美色| 全黄h全肉边做边吃奶在线观看| 狠狠色丁香久久婷婷综| 午夜国产福利| videos另类重口tv| 99国产在线| 男人的天堂色偷偷之色偷偷| 久久久精品免费国产四虎| 久久婷婷久久一区二区三区|