Linux/Unix C 编程]之(三)perror函数,strerror函数,errno
4v
fV2Ii5T'l0
'b@L4R5F
X0#include <stdio.h> // void perror(const char *msg);Linuxeden博客家园d$n!Vy,FFc #include <string.h> // char *strerror(int errnum);Linuxeden博客家园GH`pnUK #include <errno.h> //errno
Vys{;F)]4O%y9O0Linuxeden博客家园kfzMP
:A8_/t{f0errno 是错误代码,在 errno.h头文件中; +BrnEFJ ?0perror是错误输出函数,输出格式为:msg:errno对应的错误信息(加上一个换行符); IH.o]2i-ko
K0strerror 是通过参数 errnum (就是errno),返回对应的错误信息。Linuxeden博客家园7]XK}'?
Linuxeden博客家园G!ZLlilJ7D
以下是测试程序:
/|9Wa6^0D[0Linuxeden博客家园 ^9|5Da3tf
--------------------------------------------------------------------
/T?[cS]3d3Q0
t$g-^\P"s2~D0// p_str_error.cLinuxeden博客家园3_h^9Vz2]$z // perror , strerror 函数 , errno 测试
2DvBs:o?J(XQ%J)Z?d0Linuxeden博客家园:X&d5@*N-Wjc&KX?T,K
#include <stdio.h> c;RY9oAp/A
pfX(O{0#include <stdlib.h>Linuxeden博客家园D3X%I d
[:wB?c3g5w[5k #include <string.h> )wA|s
G-T1U0#include <errno.h>
*|Id?+Y6DsU0Linuxeden博客家园/aoS
uT-~uB.g^
int main(int argc, char *argv[]) fK5D7NR$]D0{ ;U*@Qgm0 FILE *fp; K#X%fgl[1k0 char *buf;Linuxeden博客家园~oWZSc:W`
Linuxeden博客家园DPN,]yycH
if( (fp = fopen(argv[1], "r")) == NULL) C3sDUx5ep0 { Fs{}
C'x
_@0 perror("perror"); // 好方便 LNPZ#{0 errno = 12;Linuxeden博客家园F2fW8jY4@;r printf("strerror: %s\n", strerror(errno)); //转换错误码为对应的错误信息 8[(KpKv:~q0 exit(1);Linuxeden博客家园MqV(w7OHM;N3E }Linuxeden博客家园]
KS/g?j_
R perror("perror"); LP!|
?4E7UK0 errno = 13; }*J
_
^w4XF0 printf("strerror: %s\n", strerror(errno)); )J-n?@_G;is1i0 Linuxeden博客家园n4g9Z](jr fclose(fp); Linuxeden博客家园-_,UI8Fw return 0;
D"~tJ| e0}
`^+G2?"IR0Linuxeden博客家园dn~x/vV-T5`!s0K
Gg)E:YDGn0--------------------------------------------------------------------Linuxeden博客家园1I5w [(q)r*X 输入一个存在的文件名,如:./a.out 111Linuxeden博客家园_U)u.dx+dw8`
)L dY&q${VUIi&oE2p0open失败则会输出:Linuxeden博客家园[
\*p`:\ perror: No such file or directoryLinuxeden博客家园|V;{q$o:GDN&O strerror: Cannot allocate memory
l9gX8||[0
T,?WK
],gRl:Y*v0open成功则会输出: 1Dme~`J0perror: Success M"k&K R^F#U0strerror: Permission denied
g
?b2c6D#K2IB?N(?0Linuxeden博客家园#n9m1reW0C*]Nw1l
很明显,perror信息是由 perror函数输出的了,第二行是 strerror通过将 errno 轮换成对应的错误信息打印出来。Linuxeden博客家园;`me+|(A%d
b
!g$b!Au_d0kZx4~S fy0这次就写这么多了,程序简单,没啥好说的了。Linuxeden博客家园l!\#~?:X\} 最近在搭建开发环境,设计整个系统架构了。花了六年时间研发的系统,终于上线了。Linuxeden博客家园'D&@.\-u6l(z 我要用多少时间来学习呢,还好有资料,有源码,学习起来还不算吃力,嘿嘿。。。。。。 2^s7wcz"L`#NW^0我要写一套山寨版的^_^!!!
|