errno,strerror和Linux系统调用

时间:2011-04-16 10:47:12

标签: c linux error-handling

在使用CRT函数后,我可以使用strerror来获取errno值的文本表示,例如 fopen 。如果我使用打开 Linux系统调用而不是CRT函数,它还会在失败时设置errno值。将strerror应用于此errno值是否正确?如果没有,是否有一些Linux系统调用,它与strerror相同?

2 个答案:

答案 0 :(得分:5)

是的,您的代码可能类似于(未经测试):

   #include <stdio.h>
   #include <errno.h>
   #include <string.h>               // declares: char *strerror(int errnum);

   FILE *
   my_fopen ( char *path_to_file, char *mode ) {
     FILE *fp;
     char *errmsg;
     if ( fp = fopen( path_to_file, mode )) {
       errmsg = strerror( errno );  // fopen( ) failed, fp is set to NULL
       printf( "%s %s\n", errmsg, path_to_file );
     } 
     else {                         // fopen( ) succeeded
     ...
     } 

     return fp;                     // return NULL (failed) or open file * on success
   }

答案 1 :(得分:2)

perror

if (-1 == open(....))
{
    perror("Could not open input file");
    exit(255)
}