perror() - エラー・メッセージの出力

標準

標準/拡張機能 C/C++ 依存項目

ISO C
POSIX.1
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3
Language Environment

両方  

形式

#include <stdio.h>

void perror(const char *string);

#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>

void perror_unlocked(const char *string);
X/Open:
#define _XOPEN_SOURCE_EXTENDED 1
#include <stdio.h>

void perror(const char *string);
バークレー・ソケット:
#define _OE_SOCKETS
#include <stdio.h>

void perror(const char *string);

機能説明

エラー・メッセージを stderr に出力します。string が NULL ではなく、NULL 文字を指示しない場合には、ストリングによって指示された string は、標準エラー・ストリームに出力 され、その後ろにコロンとスペースが続きます。次に、errno の値と関連したメッセージが出力され、その後ろに括弧で囲まれた errno2 値および改行文字が続きます。メッセージの内容は、引数 errno をもつ strerror() によって 戻されたストリングの内容と同じです。

「EDC5121I 無効な引数」として表示される perror() ストリング。 (errno2=0x0C0F8402)。

正確な結果を得るには、エラーのあるライブラリー関数が戻った直後に perror() を必ず呼び出してください。そうでないと、後続の呼び出しにより errno 値が変更されることがあります。

そのエラーが stderr ファイルと関連している場合には、perror() の呼び出しは無効になります。

環境変数 _EDC_ADD_ERRNO2 を 0 に設定すると、以下のよう に、現在の errno2 の値を perror() ストリングの終わりに付加しないようにします。

perror() 関数は、stderr ストリームの指向を変更しません。

perror_unlocked() は、スレッド・セーフでないことを除いて、機能的に perror() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。

戻り値

perror() は値を戻しません。

CELEBP03
⁄* CELEBP03                                      

   This example tries to open a stream.                                         
   If the fopen() function fails, the example prints a message and ends         
   the program.                                                                 

 *⁄                                                                             
#include <stdio.h>                                                              
#include <stdlib.h>                                                             
                                                                                
int main(void)                                                                  
{                                                                               
   FILE *fh;                                                                    
                                                                                
   if ((fh = fopen("myfile.dat","r")) == NULL)                                  
   {                                                                            
      perror("Could not open data file");                                       
      abort();                                                                  
   }                                                                            
}                                                                               
次の例では、ストリーム・ソケットのオープンを試みます。ソケットが失敗した場合、この例ではメッセージが出力されてからプログラムが終了します。
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket>

int main(void)
{
   ins s;

   if ((s = socket (AF_INET,SOCK_STREAM,0)) <0)
   {
      perror("Could not open socket");
      exit(-1);
   }
}

関連情報