perror()与strerror()的应用及区别 man手册查询
下面是perror() 與 strerror() 的使用范例及區別:
perror()原型:
#include <stdio.h>
void perror(const char *s);
其中,perror()的參數s 是用戶提供的字符串。當調用perror()時,它輸出這個字符串,后面跟著一個冒號和空格,然后是基于當前errno的值進行的錯誤類型描述。
strerror()原型:
#include <string.h>
char * strerror(int errnum);
這個函數將errno的值作為參數,并返回一個描述錯誤的字符串
/*rename.c*/#include<stdio.h> #include <string.h> #include <errno.h>int main(int argc,char **argv) {char path[]="./first.c";char newpath[] = "./second.c";char newpathnot[] = "./gong/suo.c";extern int errno;if( rename(path,newpathnot) == 0){printf("the file %s was moved to %s.",path,newpathnot);}else{printf("Can't move the file %s.\n",path);printf("errno:%d\n",errno);printf("ERR:%s\n",strerror(errno));perror("Err");}if(rename(path,newpath) == 0)printf("the file %s was moved to %s.\n",path,newpath);else{printf("Can't move the file %s.\n",path);printf("errno:%d\n",errno);printf("ERR:%s\n",strerror(errno));}return 0; }gcc rename.c -o rename ./renameCan't move the file ./first.c. errno:2 ERR:No such file or directory Err: No such file or directory the file ./first.c was moved to ./second.c
.
strerror()方法與perror()的用法十分相似。
?? ?先談談perror()的用法,這個方法用于將上一條語句(方法)執行后的錯誤打印到標準輸出上。一般情況下(沒有使用重定向的話),就是輸出到控制臺上。
但是,如果我需要了解另外一個進程的某一個方法執行的錯誤,或者更briefly,我就希望將錯誤打印到一個文件里面,perror()就不太合適了!
為了實現我剛剛說到的要求,我們首先要將錯誤放到一個字符串里面。這個時候,strerror()就合適了!
strerror(errno)
?? ?首先,系統會根據上一條語句的執行錯誤情況,將errno賦值.。關于這點,我們首先明白兩點。第一,errno是一個系統變量,是不需要我們賦值或者聲明的。第二,errno是一個int類型的變量,而且其中的值對應一種特定錯誤類型
然后,關于streorror()本身,可以這么理解。顧名思義,streorror=string+error,就是將errno值翻譯成描述錯誤類型的string語句!
===========================ubuntu下man的應用===============================
1, man 介紹
Linux提供了豐富的幫助手冊,當你需要查看某個命令,某個函數的使用方法時,不必在網上到處查找,只要man一下即可。
Linux的man手冊共有以下幾個章節:
1) Standard Commands (標準命令)
2) System Calls (系統調用)
3) Library Functions (庫函數)
4) Special Devices (設備說明)
5) File Formats (文件格式)
6) Games and Toys (游戲和娛樂)
7) Miscellaneous (雜項)
8) Administrative Commands (管理員命令)
2, 手冊完善
ubuntu中man的手冊默認情況下并沒安裝完全。所以用man命令查看C語言函數原型等會失敗。使用以下幾條命令進行完善:
a, sudo apt-get install manpages ?()
b, sudo apt-get install manpages-de? ?()
c, sudo apt-get install manpages-de-dev ?()
d, sudo apt-get install manpages-dev (C語言庫函數)
3, man命令的使用
命令格式:man [章節號] 手冊名稱
man是按照手冊的章節號的順序進行搜索的,比如:man sleep 只會顯示sleep命令的手冊,如果想查看庫函數sleep,就要輸入man 3 sleep。
?
總結
以上是生活随笔為你收集整理的perror()与strerror()的应用及区别 man手册查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java解析json出现双引号变成转义字
- 下一篇: jetty优秀文章