標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#include <stdio.h>
void perror(const char *string);
#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>
void perror_unlocked(const char *string);
#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
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);
}
}