精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有關(guān)文件IO操作的錯(cuò)誤(error)提示

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

編程中,我們一般都是要講究一定的使用規(guī)范的。按照一定的規(guī)范編寫(xiě)代碼,返回運(yùn)行提示,在代碼運(yùn)行出現(xiàn)問(wèn)題時(shí)能方便我們能快速的定位到問(wèn)題的所在。

特別是在使用庫(kù)函數(shù)或者系統(tǒng)調(diào)用的API的時(shí)候,我們最好也要關(guān)注函數(shù)的返回值所能給我們提供的信息,充分利用好這些返回值以及返回值所代表的含義,對(duì)我們的錯(cuò)誤查找是有很大的便利的!

本文記錄一下文件IO操作時(shí)的一些錯(cuò)誤提示,通過(guò)函數(shù)的調(diào)用之后的返回值去查找對(duì)應(yīng)的問(wèn)題。

有關(guān)文件IO的 errno 變量

linux系統(tǒng)中對(duì)于常見(jiàn)的錯(cuò)誤都進(jìn)行了統(tǒng)計(jì),這些不同的錯(cuò)誤已經(jīng)被系統(tǒng)進(jìn)行了編號(hào),并且每個(gè)錯(cuò)誤類型的編號(hào)都不一樣,以此來(lái)區(qū)分不同的錯(cuò)誤類型。

errno實(shí)際上是一個(gè)int型的全局變量,它存儲(chǔ)的是當(dāng)前執(zhí)行函數(shù)所發(fā)生的錯(cuò)誤編號(hào),如果這個(gè)錯(cuò)誤在被記錄時(shí)沒(méi)有被及時(shí)的訪問(wèn),那么會(huì)被下一次發(fā)生的錯(cuò)誤編號(hào)所覆蓋掉。

但是有一點(diǎn)是要注意的,不是所有的庫(kù)函數(shù)或者系統(tǒng)調(diào)用都會(huì)有錯(cuò)誤碼返回的,關(guān)于這邊要去查詢所調(diào)用的函數(shù)說(shuō)明才能知道。比如我想知道函數(shù) open 是否會(huì)返回錯(cuò)誤碼,那就可以使用 man 2 open 進(jìn)行查看,如下:

圖片

從圖中可以看出,open函數(shù)在調(diào)用出現(xiàn)異常的時(shí)候會(huì)設(shè)置errno變量的。

C庫(kù)函數(shù) strerror( )

雖然我們知道了通過(guò)errno變量可以獲取到函數(shù)調(diào)用出現(xiàn)錯(cuò)誤時(shí)的錯(cuò)誤編號(hào)。但是錯(cuò)誤編號(hào)它只是一個(gè)數(shù)字,對(duì)于我們而言光是知道一個(gè)數(shù)字總歸是差點(diǎn)意思的。

而我們最終是希望通過(guò)這個(gè)數(shù)字獲取到有關(guān)的錯(cuò)誤原因或者某種提示,這才是我們查找問(wèn)題的好幫手啊。

這個(gè)時(shí)候我們可以考慮使用一個(gè)C庫(kù)函數(shù)— strerror()。通過(guò)這個(gè)函數(shù)將我們代碼中獲取到的錯(cuò)誤編碼轉(zhuǎn)換成對(duì)應(yīng)的字符串輸出,讓我們能夠看的明白錯(cuò)誤是怎么回事。

strerror()函數(shù)的原型如下:

#include 


char*strerror(int errnum);



參數(shù)和返回值如下:


errnum :錯(cuò)誤編號(hào) errno。


返回值:對(duì)應(yīng)錯(cuò)誤編號(hào)的字符串描述信息。

比如:我調(diào)用open函數(shù)以只讀的方式打開(kāi)一個(gè)不存在的文件,并打印變量errno的值,然后轉(zhuǎn)換成字符串輸出,看看是什么效果。

代碼如下:


#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);


}

運(yùn)行之后的輸出結(jié)果如下:

圖片

從圖上可以看出來(lái),因?yàn)閤xxx.txt這個(gè)文件是不存在的,用open函數(shù)的只讀的方式打開(kāi)的話,會(huì)返回錯(cuò)誤編號(hào)2,通過(guò)strerror函數(shù)返回的錯(cuò)誤信息是“No such file or directory”,說(shuō)的是找不到這個(gè)文件。

當(dāng)然,除了strerror函數(shù)之外,還有一個(gè)函數(shù)也是實(shí)現(xiàn)一樣的效果的,那就是perror,這個(gè)函數(shù)會(huì)自動(dòng)附加一些信息輸出,可以更加方便我們輸出調(diào)試查看信息!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    591

    瀏覽量

    27354
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    577

    瀏覽量

    20485
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    文件IO操作時(shí)的常見(jiàn)錯(cuò)誤

    在編程中,我們一般都是要講究一定的使用規(guī)范的。按照一定的規(guī)范編寫(xiě)代碼,返回運(yùn)行提示,在代碼運(yùn)行出現(xiàn)問(wèn)題時(shí)能方便我們能快速的定位到問(wèn)題的所在。
    發(fā)表于 01-11 15:36 ?1192次閱讀
    <b class='flag-5'>文件</b><b class='flag-5'>IO</b><b class='flag-5'>操作</b>時(shí)的常見(jiàn)<b class='flag-5'>錯(cuò)誤</b>

    makefile文件出現(xiàn)錯(cuò)誤提示 求解

    我在編譯簡(jiǎn)單的驅(qū)動(dòng)程序框架時(shí)makefile文件出現(xiàn)cc1: error: invalid option `abi=apcs-gnu'錯(cuò)誤提示。大家看下怎么回事啊?makefile
    發(fā)表于 03-18 10:17

    用primace測(cè)試vhd文件提示錯(cuò)誤的解決辦法?

    Error:CMD_ERR_033: Cannot find current_design 'XZJ'! 用primace測(cè)試vhd文件提示如下錯(cuò)誤
    發(fā)表于 06-16 09:03

    硬盤(pán)故障提示

    硬盤(pán)故障提示 (1)Date error(數(shù)據(jù)錯(cuò)誤) 從軟盤(pán)或硬盤(pán)上讀取的數(shù)據(jù)存在不可修復(fù)錯(cuò)誤,磁盤(pán)上有壞扇區(qū)和壞的文件分配
    發(fā)表于 01-08 09:37 ?1573次閱讀

    電腦錯(cuò)誤信息的中文解讀

    電腦各種錯(cuò)誤信息的中文意思 一、BIOS中的提示信息 提示信息 說(shuō)明 Drive A error 驅(qū)動(dòng)器A錯(cuò)誤 System halt 系統(tǒng)
    發(fā)表于 02-11 17:32 ?762次下載

    Bada系統(tǒng)學(xué)習(xí)-錯(cuò)誤碼(Error Codes)

    of an error code下表描述了錯(cuò)誤碼的詳情? Table: Error codes Error code
    發(fā)表于 04-02 14:35 ?543次閱讀

    STM32F1的ADC2如何使用DMA功能 USART過(guò)載錯(cuò)誤Overrun error

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

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

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

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

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

    error:expected identifier before ‘(‘ token,結(jié)構(gòu)體指針宏定義錯(cuò)誤

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

    Linux下文件IO相關(guān)操作

    Linux - 基礎(chǔ) IO 文件 IO 相關(guān)操作 stdin stdout stderr 系統(tǒng)文件 I/O
    發(fā)表于 08-11 11:55 ?487次閱讀

    pip安裝時(shí) fatal error C1083 無(wú)法打開(kāi)包括文件io.h” No such file or directory

    原文鏈接 報(bào)錯(cuò) 使用pip安裝模塊,出現(xiàn)錯(cuò)誤: c:\\users\\anaconda3\\include\\pyconfig.h(68): fatal error C1083: 無(wú)法打開(kāi)包括文件
    的頭像 發(fā)表于 01-12 11:24 ?3390次閱讀

    嵌入式Linux學(xué)習(xí)筆記:文件IO

    在linux中一切都叫文件,比如普通文件,設(shè)備文件,管道。在應(yīng)用層,可以用一套文件IO讀寫(xiě)文件
    發(fā)表于 06-23 14:25 ?264次閱讀
    嵌入式Linux學(xué)習(xí)筆記:<b class='flag-5'>文件</b><b class='flag-5'>IO</b>

    a javascript error怎么修復(fù)

    修復(fù)"a javascript error"的方法可以因情況而異,但以下是一些常見(jiàn)的解決方法: 檢查錯(cuò)誤消息 首先,查看瀏覽器控制臺(tái)中的錯(cuò)誤消息。錯(cuò)誤消息通常會(huì)提供
    的頭像 發(fā)表于 11-26 14:41 ?4870次閱讀

    linux打開(kāi)文本文件命令提示錯(cuò)誤

    Linux中打開(kāi)文本文件的命令通常是使用文本編輯器打開(kāi),例如常用的命令有 vi 、 vim 、 nano 等。如果在使用其中一個(gè)命令時(shí)出現(xiàn)錯(cuò)誤提示,可能有以下幾種原因和解決方法。 錯(cuò)誤
    的頭像 發(fā)表于 12-22 15:10 ?787次閱讀