江惠和邓丽君:[学习 Linux/Unix C 编程]之(三)perror函数,strerror函数,errno
Linux/Unix C 编程]之(三)perror函数,strerror函数,errno
4vfV2Ii5T'l0'b@L4R5FX0#include
#include
#include
:A8_/t{f0errno 是错误代码,在 errno.h头文件中;
+BrnEFJ ?0perror是错误输出函数,输出格式为:msg:errno对应的错误信息(加上一个换行符);
IH.o]2i-koK0strerror 是通过参数 errnum (就是errno),返回对应的错误信息。Linuxeden博客家园7]XK}'?
以下是测试程序:
/|9Wa6^0D[0Linuxeden博客家园 ^9|5Da3tf--------------------------------------------------------------------
/T?[cS]3d3Q0t$g-^\P"s2~D0// p_str_error.cLinuxeden博客家园3_h^9Vz2]$z
// perror , strerror 函数 , errno 测试
#include
c;RY9oAp/ApfX(O{0#include
#include
)wA|sG-T1U0#include
int main(int argc, char *argv[])
fK5D7NR$]D0{
;U*@Qgm0 FILE *fp;
K#X%fgl[1k0 char *buf;Linuxeden博客家园~oWZSc:W`
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}
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
T,?WK],gRl:Y*v0open成功则会输出:
1Dme~`J0perror: Success
M"k&K R^F#U0strerror: Permission denied
很明显,perror信息是由 perror函数输出的了,第二行是 strerror通过将 errno 轮换成对应的错误信息打印出来。Linuxeden博客家园;`me+|(A%db
!g$b!Au_d0kZx4~S fy0这次就写这么多了,程序简单,没啥好说的了。Linuxeden博客家园l!\#~?:X\}
最近在搭建开发环境,设计整个系统架构了。花了六年时间研发的系统,终于上线了。Linuxeden博客家园'D&@.\-u6l(z
我要用多少时间来学习呢,还好有资料,有源码,学习起来还不算吃力,嘿嘿。。。。。。
2^s7wcz"L`#NW^0我要写一套山寨版的^_^!!!