最終更新日時(UTC): 2025年07月10日 01時26分30秒
Koichi Murase が更新

履歴 編集

function
<fstream>

# std::basic_ifstream::native_handle(C++26)

    native_handle_type native_handle() const noexcept;

## 概要

処理系定義のネイティブハンドルを取得する。

## 事前条件

- `is_open()`が`true`を返すこと

## 戻り値

以下と等価：

    return rdbuf()->native_handle();

## 備考

- ネイティブハンドルは、ファイルが閉じられると無効になる

## 例

    // POSIX環境
    #include <fstream>
    #include <print>
    #include <chrono>

    #include <sys/types.h>
    #include <sys/stat.h>

    int main() {
      std::ifstream ifs("example.txt");

      if (!ifs.is_open()) {
        std::println("ファイルを開けなかった");
        return 1;
      }

      // ネイティブハンドルから、POSIXのAPIでファイルの最終更新日時を取得する
      int fd = ifs.native_handle();
      struct ::stat s{};
      ::fstat(fd, &s);

      std::chrono::sys_seconds last_modified {std::chrono::seconds(s.st_mtim.tv_sec)};
      std::chrono::zoned_time zoned{"Asia/Tokyo", last_modified};
      std::println("Last modified: {}", zoned);
    }

### 出力例

    Last modified: 2025-05-28 17:56:55 JST

## バージョン

### 言語

- C++26

### 処理系

- Clang: 18 ✅
- GCC: 14 ✅
- Visual C++: ??

## 参照

- P1759R6 Native handles and file streams