新聞中心
隨著互聯網的發(fā)展,Linux操作系統(tǒng)已經成為企業(yè)級應用、云計算等領域的首選系統(tǒng)。但Linux系統(tǒng)的復雜性也導致了在運行過程中出現各種錯誤和故障。為了更好地理解和解決這些問題,我們需要了解Linux系統(tǒng)常見的錯誤值和錯誤代碼,以便迅速診斷和修復系統(tǒng)故障。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、網頁空間、營銷軟件、網站建設、甌海網站維護、網站推廣。
Linux系統(tǒng)錯誤值簡介:
Linux系統(tǒng)中的大多數錯誤都涉及到系統(tǒng)調用結果的帶符號整數返回碼。返回值小于0表示錯誤,而大于等于0的返回值表示成功。錯誤碼通常在兩個頭文件和中定義,以便使用下列宏在程序中引用。
這里列出了Linux系統(tǒng)在返回-1時的一些錯誤碼:
| 錯誤碼 | 錯誤描述 |
| —— | —————————- |
| EPERM | 操作不允許 |
| ENOENT | 源文件不存在 |
| ESRCH | 執(zhí)行目標進程不存在 |
| EINTR | 被中斷的系統(tǒng)調用重試 |
| EIO | 輸入輸出錯誤 |
| ENXIO | 設備不存在 |
| E2BIG | 參數列表過長 |
| ENOEXEC| 執(zhí)行格式出錯 |
| EBADF | 錯誤的文件描述符 |
| ECHILD | 進程不存在 |
| EAGN | 無法獲取鎖資源,重試 |
| ENOMEM | 內存不足 |
| EACCES | 權限不足 |
| EFAULT | 參數指針非法 |
| EBUSY | 資源正被占用無法使用 |
| EEXIST | 文件已存在 |
| EXDEV | 不同設備間的鏈接 |
| ENODEV | 設備不存在 |
| ENOTDIR| 不是目錄 |
| EISDIR | 是目錄 |
| EINVAL | 參數無效 |
| ENFILE | 文件表已滿 |
| EMFILE | 進程的文件描述符數已達到上限 |
| ENOTTY | 操作不支持的終端 |
| ETXTBSY| 只讀文件的寫入被阻止 |
| EFBIG | 文件太大 |
| ENOSPC | 設備空間不足 |
| ESPIPE | seek()超出了文件尾部 |
| EROFS | 文件系統(tǒng)只讀 |
| EMLINK | 超過磁盤表數 |
| EPIPE | 管道破裂 |
| ENAMETOOLONG|路徑名太長 |
| ENOLCK | 系統(tǒng)內的鎖已使用完 |
以上錯誤碼只是一部分,Linux系統(tǒng)中還有許多其他錯誤碼,這些錯誤碼在很大程度上反映了系統(tǒng)的狀態(tài)和問題,因此熟悉這些錯誤碼對于快速定位并解決問題非常有幫助。
如何解決Linux錯誤值:
在程序中,我們經常需要判斷一些函數是否執(zhí)行成功,這就需要對返回的錯誤值進行解析和判斷。例如,常用的文件操作函數open()和read()可能會遇到一些錯誤,如文件不存在、文件權限不足、磁盤空間不足等等。當這些情況發(fā)生時,函數會返回相應的錯誤碼。正確的做法是檢查函數返回值,并根據返回值進行相應的操作。
以下是一個文件讀取程序的示例代碼:
“`c
#include
#include
#include
#include
int mn(int argc, char **argv) {
int fd;
char buf[1024];
fd = open(“/path/to/file”, O_RDON);
if (fd == -1) {
perror(“open”);
exit(EXIT_FLURE);
}
if (read(fd, buf, 1024) == -1) {
perror(“read”);
exit(EXIT_FLURE);
}
if (close(fd) == -1) {
perror(“close”);
exit(EXIT_FLURE);
}
exit(EXIT_SUCCESS);
}
“`
在程序中,我們首先使用open()函數打開文件,如果文件打開失敗,它會返回-1,并將errno設置為相應的錯誤碼。我們使用perror()函數將錯誤信息輸出到標準錯誤流,然后使用exit()函數退出程序。
錯誤處理的概念和方法同樣適用于其他系統(tǒng)調用和庫函數。每次調用系統(tǒng)函數之后都應該檢查錯誤碼,并采取相應的行動??梢詫㈠e誤處理代碼封裝進函數中,便于復用和修改。
:
成都網站建設公司-創(chuàng)新互聯,建站經驗豐富以策略為先導10多年以來專注數字化網站建設,提供企業(yè)網站建設,高端網站設計,響應式網站制作,設計師量身打造品牌風格,熱線:028-86922220Linux中SIG_ERR值是什么
糾正一下:
輸出in sig_fun1:30就是第二次調用的時候輸出的,之一次調用只是綁定了SIGUSR1的信號處理函數,不會進入該處理函數
為什么會有這樣的輸出呢?
signal函數是將信號與處理函數進行綁定,成功綁定則返回綁定之前的信號處理函數。那么來看看你的代碼,之一次調用將sig_fun1綁定,無輸出;第二次調用將sig_fun2綁定,也就是把sig_fun1替換下來,并且你還調用了它,參數為30,所以會有那樣的輸出。
該如何改呢?
其實你并沒有涉及到linux的信號處理機制,光綁定是不夠的,還需要發(fā)信號給它,才能真正進入信號處理過程。給你一個示例代碼吧
#include
#include
#include
#include
void sig_fun2(int signo)
{
printf(“in sig_fun2:%d\n”, signo);
}
void sig_fun1(int signo)
{
printf(“in sig_fun1:%d\n”, signo);
}
int main()
{
unsigned long i;
if (signal(SIGUSR1, sig_fun1) == SIG_ERR)
{
printf(“signal fun1 error\n”);
exit(1);
}
sleep(15);
(signal(SIGUSR1, sig_fun2))(30);
sleep(15);
printf(“done\n”);
return 0;
}
/****************************C 代碼完,下面是如何運行***************************/
首先編譯,假設生成可執(zhí)行程序為test
然后運行,我用的是后臺運行: nohup ./test>output.txt &
注意,這種手脊方法要將輸出重定向到文件output.txt(名字無所謂),然后你會看到一個數字,就是pid進程號
最后,在15秒之內發(fā)送信號:kill -SIGUSR1 進程號
現在你就可以打開output.txt看輸出結果了。如果用sleep的話會被打斷,所以只有兩個輸出加上替換處理函數時的輸出共3個,也可以換成 int n=15;while(n–)sleep(1);
—–
怎么樣,加分吧
—–
1.我就是想問第二次綁定sig_fun2的時候,調用了之一次綁定的sig_fun1么?
調用了, (signal(SIGUSR1, sig_fun2))(30);就是這一句, signal(SIGUSR1, sig_fun2)是個函數指針,你這樣寫就是調用它了,但是這和信號處理沒關系,寫成signal(SIGUSR1, sig_fun2);就可以了
這就是你所說的成功則返回綁定之前的函數???
對
那當時綁定sig_fun1的時候,返回之前的處理函數是什么??
這個就是系統(tǒng)默認的了,比如SIGINT就是你ctrl+c取消程序執(zhí)行發(fā)送或氏的信號,它的處理函數就是結束程序的一系列動作,不過SIGUSR1是留給用戶自定義的信號,系統(tǒng)默認應該是啥也不做的一個函數,例如void fun(int signo){},你也可以之一次綁定的時候就調用試試看對不對
2.還有我在看signal函數定義的時候,void(//…)(int) 最衫薯散后傳入的這個int整形參數就是我們自定義sig_fun()中所接收的30么??我看例子里面有的signal(SIGINT,myfunc);也沒有帶參數啊,搞不懂
是你理解錯了,signal函數只是綁定,沒涉及到調用綁定函數,不用帶參數,信號處理函數不是像你這樣調用的。callback回調你知道吧,就是先做好一個函數或過程放著,事件觸發(fā)的時候才調用。那個30是你用普通函數調用的方式時的參數,跟信號處理一點關系也沒有,你用60,70也沒半毛錢關系。我猜你是想要調用信號處理函數,然后迷糊了,其實我上面說的“kill -SIGUSR1 進程號”就是觸發(fā)程序調用該處理函數的信號,這和kill -9 殺死進程一個道理,只不過處理函數不同,結果不一樣。ctrl+c也可以用信號的方式發(fā)送,kill -2 進程號,或者 kill -SIGINT 進程號
linux 錯誤值的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于linux 錯誤值,掌握Linux錯誤值,避免系統(tǒng)出錯!,Linux中SIG_ERR值是什么的信息別忘了在本站進行查找喔。
創(chuàng)新互聯【028-86922220】值得信賴的成都網站建設公司。多年持續(xù)為眾多企業(yè)提供成都網站建設,成都品牌建站設計,成都高端網站制作開發(fā),SEO優(yōu)化排名推廣服務,全網營銷讓企業(yè)網站產生價值。
本文標題:掌握Linux錯誤值,避免系統(tǒng)出錯!(linux錯誤值)
網站鏈接:http://www.5511xx.com/article/cdcpcpp.html


咨詢
建站咨詢
