Skip to content
2 changes: 1 addition & 1 deletion reference/cstdio.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
| [`fputc`](/reference/cstdio/fputc.md) | ファイルに1文字出力する | |
| [`fputs`](/reference/cstdio/fputs.md) | ファイルにN文字出力する | |
| [`fread`](/reference/cstdio/fread.md) | ファイルからN文字読み込む | |
| [`fwrite`](/reference/cstdio/fwrite.md.nolink) | ファイルにN文字書き込む | |
| [`fwrite`](/reference/cstdio/fwrite.md) | ファイルにN文字書き込む | |
| [`fgetpos`](/reference/cstdio/fgetpos.md.nolink) | ファイルの現在位置を取得する | |
| [`fseek`](/reference/cstdio/fseek.md.nolink) | ファイルの現在位置を移動する | |
| [`fsetpos`](/reference/cstdio/fsetpos.md.nolink) | ファイルの現在位置を設定する | |
Expand Down
5 changes: 5 additions & 0 deletions reference/cstdio/fgets.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ namespace std {

また、改行にたどり着くとそこで読み込みを終了する(末尾に改行文字を含める)。

## 要件
- `str`は有効なポインタであること。
- `stream`は有効なファイルストリームであること。
- `str`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。

## 戻り値
成功すれば読み込まれた文字列を、そうでなければ`NULL`を返す。

Expand Down
5 changes: 5 additions & 0 deletions reference/cstdio/fputs.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ namespace std {
## 概要
ファイルに渡された文字列を出力する。

## 要件
- `str`は有効なポインタであること。
- `stream`は有効なファイルストリームであること。
- `str`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。

## 戻り値
正常終了した場合は`0`を、そうでなければ[`EOF`](/reference/cstdio/eof.md)を返す。

Expand Down
1 change: 1 addition & 0 deletions reference/cstdio/fread.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ namespace std {
## 要件
- `buffer`は有効なポインタであること。
- `stream`は有効なファイルストリームであること。
- `buffer`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。

## 戻り値
正常に読み込むことのできた項目の数を返す。
Expand Down
76 changes: 76 additions & 0 deletions reference/cstdio/fwrite.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# fwrite
* cstdio[meta header]
* std[meta namespace]
* function[meta id-type]

```cpp
namespace std {
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
}
```

## 概要
ストリームに`count`個の`size`バイトの要素を書き込む。

ストリーム内の位置は、書き込まれたバイトだけ進む。

書き込み時にエラーが発生した場合、ストリーム内の位置は不定である。

また、書き込みには内部的に[`fputc`](/reference/cstdio/fputc.md)を使用する。

## 要件
- `buffer`は有効なポインタであること。
- `stream`は有効なファイルストリームであること。
Comment thread
rotarymars marked this conversation as resolved.
- `buffer`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。

## 戻り値
正常に書き込むことのできた要素の数を返す。

## 効果
`buffer`が指すメモリから`count`個の`size`バイトの要素を`stream`に書き込む。

書き込みエラーが生じなければ、書き込むデータの大きさは`count * size`バイトである。

## 例
```cpp example
#include <cstdio>

int main() {
std::FILE *file = std::fopen("output.txt", "w");
if (!file) {
std::perror("ファイルを開けませんでした");
return 1;
}

const char data[] = "Hello, World!\n";
/*
厳密には、sizeof(char)は1バイトであることが保証されているため、
sizeof(data) - 1は、文字列の長さ(ヌル終端文字を除く)と等しくなる。
*/
std::size_t count = std::fwrite(data, sizeof(char), sizeof(data) - 1, file);
std::printf("書き込んだデータの長さ: %zu\n", count);

std::fclose(file);
return 0;
}
```
* std::fwrite[color ff0000]
* std::fopen[link /reference/cstdio/fopen.md]
* std::fclose[link /reference/cstdio/fclose.md]
* std::perror[link /reference/cstdio/perror.md.nolink]
* std::printf[link /reference/cstdio/printf.md]

### 出力例
```
書き込んだデータの長さ: 13
```

### ファイル出力(output.txt)
```
Hello, World!
Comment thread
akinomyoga marked this conversation as resolved.
```

## 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [Visual C++](/implementation.md#visual_cpp): ??