1、void perror(const char *s); perror ("open_port");
#include <stdio.h>
perror ( )用來将上一個函數發生錯誤的原因輸出到标準裝置(stderr)。參數 s 所指的字元串會先列印出,後面再加上錯誤原因字元串。此錯誤原因依照全局變量error的值來決定要輸出的字元串。
2、char * strerror(int errnum);
#include <string.h>
此函數将errnum(它通常就說errno值)映射為一個出錯資訊字元串,并傳回此字元串的指針。
3、差別
perror是将errno對應的錯誤消息的字元串列印到标準錯誤輸出上,即stderr或2上,若你的程式将标準錯誤輸出重定向到/dev/null,那就看不到了,就不能用perror了。而 strerror的作用隻是将errno對應的錯誤消息字元串傳回,要怎樣處理完全由你自己決定。通常我們選擇把錯誤消息儲存到日志檔案中,即寫檔案,是以通常可以用fprintf(fp, "%s", strerror(errno))将錯誤消息列印到fp指向的檔案中。其中perror中errno對應的錯誤消息集合跟strerror是一樣的,也就是說不會漏掉某些錯誤。
原文
http://www.cnblogs.com/zjfdbz/archive/2012/12/16/2821061.html