路拌机型号:[学习 Linux/Unix C 编程]之(三)perror函数,strerror函数,errno

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 21:11:45

Linux/Unix C 编程]之(三)perror函数,strerror函数,errno

4vfV2Ii5T'l0

'b@L4R5FX0#include // void perror(const char *msg);Linuxeden博客家园d$n!Vy,FFc
#include // char *strerror(int errnum);Linuxeden博客家园GH`pnUK
#include //errno

Vys{;F)]4O%y9O0Linuxeden博客家园kfzMP


:A8_/t {f0errno 是错误代码,在 errno.h头文件中;
+BrnEFJ ?0perror是错误输出函数,输出格式为:msg:errno对应的错误信息(加上一个换行符);
IH.o]2i-k oK0strerror 是通过参数 errnum (就是errno),返回对应的错误信息。Linuxeden博客家园7]X K}'?

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
c;RY9oAp/ApfX(O{0#include Linuxeden博客家园D3X%I d[:wB?c3g5w[5k
#include
)wA|sG-T1U0#include

*|Id ?+Y6Ds U0Linuxeden博客家园/a oSuT-~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)
C3sDUx5e p0 {
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],g Rl: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%db

!g$b!Au_d0kZx4~ S f y0这次就写这么多了,程序简单,没啥好说的了。Linuxeden博客家园l!\#~?:X\}
最近在搭建开发环境,设计整个系统架构了。花了六年时间研发的系统,终于上线了。Linuxeden博客家园'D&@.\-u6l(z
我要用多少时间来学习呢,还好有资料,有源码,学习起来还不算吃力,嘿嘿。。。。。。
2^s7wcz"L `#NW^0我要写一套山寨版的^_^!!!