標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#include <stdio.h>
int fputc(int c, FILE *stream);
#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>
int fputc_unlocked(int c, FILE *stream);
c を unsigned char へ変換し、c を stream で指定される出力ストリームへ、現在位置から書き 込み、正しくファイル位置を進めます。fputc() 関数は、putc と同じですが、マクロとして 使用できないので常に関数です。
ストリームが追加モードの 1 つでオープンされる場合は、文字は、現行のファイル位置にかかわらず、ストリームの最後に付け加え られます。
fputc() 関数は、type=record または type=blocked を使用してオープンしたファイルではサポートされません。
fputc() には、書き込みの直後に読み取り、または読み取りの直後に 書き込みを行うための書き込み操作と同じ制約事項があります。書き込みと後続の読み取りの間には、介入フラッシュまたは位置変更が 必要です。読み取りと後続の書き込みの間でも、EOF に達していない限り、介入フラッシュまたは位置変更が必要です。
fputc_unlocked() は、スレッド・セーフでないことを除いて、機能的に fputc() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。
正常に実行された場合、fputc() は、書き込まれた文字を戻します。
正常に実行されなかった場合、fputc() は EOF を戻します。
⁄* CELEBF34
This example writes the contents of buffer to a file called
myfile.dat.
Because the output occurs as a side effect within the second
expression of the for statement, the statement body is null.
*⁄
#include <stdio.h>
#define NUM_ALPHA 26
int main(void)
{
FILE * stream;
int i;
int ch;
char buffer[NUM_ALPHA + 1] = "abcdefghijklmnopqrstuvwxyz";
if (( stream = fopen("myfile.dat", "w"))!= NULL )
{
⁄* Put buffer into file *⁄
for ( i = 0; ( i < sizeof(buffer) ) &&
((ch = fputc( buffer[i], stream)) != EOF ); ++i );
fclose( stream );
}
else
printf( "Error opening myfile.dat¥n" );
}