Linux/Unix C程式設計之的perror函式,strerror函式,errno

pengfoo發表於2012-02-25

#include <stdio.h> // void perror(const char *msg);

#include <string.h> // char *strerror(int errnum);

#include <errno.h> //errno

errno是錯誤程式碼,在errno.h標頭檔案中

void perror(const char *s)

perror是錯誤輸出函式,在標準輸出裝置上輸出一個錯誤資訊。

引數s一般是引數錯誤的函式

例如perror("fun"),其輸出為:fun:後面跟著錯誤資訊(加上一個換行符)

char *strerror(int errnum);通過引數errnum(也就是errno),返回錯誤資訊

以下是測試程式:

//程式名:errtest.c,環境為linux

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(int argc,char *argv[]){
FILE *fp;
char *buf;
if((fp=fopen(argv[1],"r"))==NULL)
{
perror("perror");
printf("sterror:%s\n",strerror(errno));
exit(1);
}
perror("perror");
errno=13;
printf("strerror:%s\n",strerror(errno));
fclose(fp);
return 0;
}

編譯為errtest

如果輸入這樣的命令格式:./errtest 111.c(其中111.c不存在)

輸出為:

perror: No such file or directory
sterror:Illegal seek

就是兩個都是輸出到螢幕上來了。而且sterror函式通過errno得到錯誤程式碼

如果命令格式為:./errtest 111.c > out.c(其中111.c不存在)

把輸出重定位到out.c檔案中,會發現螢幕輸出為:

perror: No such file or directory
就是說函式perror始終輸出到標準輸出裝置上。而printf輸出到檔案中了

如果命令格式為:./errtest 222.c(其中222.c存在)

螢幕輸出為:

perror: Success
strerror: Permission denied(通過errno=12得到的一個資訊)

 

相關文章