errno表示錯誤代碼。 記錄系統的最後一次錯誤代碼。代碼是一個int型的值,在errno.h中定義。系統每一次出錯都會對應一個出錯代碼,例如12表示「Cannot allocate memory"。linux
stderr 是linux(unix)標準出錯輸出。linux中的一個進程啓動時,都會打開三個文件:標準輸入、標準輸出和標準出錯處理。一般這三個文件都與終端聯 系。這三個文件分別對應文件描述符0、一、2。系隊統自定義了三個文件指針stdin、stdout、stderr,分別指向標準輸入、標準輸出和標準出 錯輸出。一般結合fprintf使用:fprintf(stderr,"error message")。函數
perror是錯誤輸出函數,在標準輸出設備上輸出一個錯誤信息。是對errno的封裝。例如perror("fun"),其輸出爲:fun:後面跟着錯誤信息(加一個換行符)。包含頭文件stdio.h.post
stderror是經過參數errno,返回錯誤信息。即stderror(errno),可用printf函數打印出錯信息,用於調試。包含頭文件string.h。測試
測試代碼spa
/*.net
*時間:2012.03.11unix
*功能:測試errno、perror、strerror和stderr指針
*目的:驗證linux下出錯處理調試
*/blog
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int main(int argc[],char *argv[])
{
malloc(1);
printf("errno = %d\n",errno);
fprintf(stderr,"stderr\n");
perror("perror");
printf("strerror: %s\n",strerror(errno));
malloc(-1);
printf("errno = %d\n",errno);
fprintf(stderr,"stderr\n");
perror("perror");
printf("strerror: %s\n",strerror(errno));
return 0;
}
轉自 : http://cunxiachunshu.lofter.com/post/17f720_4a060d
概述:
perror和strerror都是C語言提供的庫函數,用於獲取與erno相關的錯誤信息,區別不大,用法也簡單。最大的區別在於perror向stderr輸出結果,而 strerror向stdout輸出結果。
測試代碼以下:
運行結果:
轉自 : http://blog.csdn.net/lalor/article/details/7555019