fgets() - ストリームからのストリングの読み取り

標準

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

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

両方  

形式

#include <stdio.h>

char *fgets(char * __restrict__string, int n, FILE * __restrict__stream);

#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>

char *fgets_unlocked(char * __restrict__string, int n, FILE * __restrict__stream);

機能説明

stream で指定されるストリームからマルチバイトを読み取り、フ ァイル位置標識によって示される位置から始まる、string で指定される配列に入れます。読み取りは、読み取られた文字数が n-1 に等しくなるまでか、改行文字 (¥n) までか、または最初にくるストリームの最後まで、続けられます。fgets() 関数は、結果を string に保管し、ストリングの終わりに NULL 文字 (¥0) を追加します。読み取られたなら、string には改行文字が含まれます。

fgets() 関数は、type=record または type=blocked を使用してオープンしたファイルで サポートされません。

fgets() には、書き込みの直後に読み取り、または読み取りの直後に 書き込みを行うための読み取り操作と同じ制約事項があります。書き込みと後続の読み取りの間には、介入フラッシュまたは位置変更が 必要です。読み取りと後続の書き込みの間でも、EOF に達していない限り、介入フラッシュまたは位置変更が必要です。

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

戻り値

正常に実行された場合、fgets() は、string バッファーへのポインターを戻します。

正常に実行されなかった場合、fgets() は、失敗を示す NULL を戻します。

n が 0 以下の場合は、ドメイン・エラーを示します。errno には失敗の原因を示す EDOM が設定されます。

n が 1 の場合は、有効な結果を示します。つまり、ストリング・バッファーには NULL 終了文字しかないことを意味します。ファイルからは何も物理的に読まれていません (そのような操作でも、読み取り操作であると見なされます。したがって、介入フラッシュや再位置決め操作が最初になければ、直後で書き込み操作を行う ことはできません)。

n が 1 より大きい場合、fgets() が失敗するのは、入出力エラーが起きたか、または EOF に達したときだけであり、その場合、ファイルからデータは読み取られません。

読み取りエラーと EOF を区別するには、ferror() 関数と feof() 関数を 使用します。データの最後のバイトを「超えて」読み取ろうとしたときのみ、EOF に達することに注意してください。 データの最後のバイトまで (最後のバイトを含む) 読み取ると、EOF 標識はオンになりません

データがストリング・バッファーに既に読み取られた後で EOF に 達した場合は、fgets() は、ストリング・バッファーを指すポインターを戻し、正常終了したことを示します。次の呼び出しは、データを読み取らずに EOF に達するため、NULL が戻される結 果となります。

CELEBF18
⁄* CELEBF18                                      

   This example gets a line of input from a data stream.                        
   It reads no more than MAX_LEN - 1 characters, or up                          
   to a new-line character, from the stream.                                    
                                                                                
 *⁄                                                                             
#include <stdio.h>                                                              
#define  MAX_LEN  100                                                           
                                                                                
int main(void)                                                                  
{                                                                               
   FILE *stream;                                                                
   char line[MAX_LEN], *result;                                                 
                                                                                
   stream = fopen("myfile.dat","r");                                            
                                                                                
   if ((result = fgets(line,MAX_LEN,stream)) != NULL)                           
       printf("The string is %s¥n", result);
                                                                                
   if (fclose(stream))                                                          
       printf("fclose error¥n");
}                                                                               

関連情報