SP_DEVICE_INTERFACE_DATA

SP_DEVICE_INTERFACE_DATA構造体に、デバイスインターフェースデータが格納されている。

SP_DEVICE_INTERFACE_DATA (setupapi.h) - Win32 apps | Microsoft Learn

SP_DEVICE_INTERFACE_DATA.cppで、

前回、Reservedだけ変わってるのをデバッガで見たので、値を出力してみた。

これじゃ全然わからんけど・・・。
これじゃ全然わからんけど・・・。

これじゃ全然わからんけど・・・。

Sample/winapi/SP_DEVICE_INTERFACE_DATA/SP_DEVICE_INTERFACE_DATA/src/SP_DEVICE_INTERFACE_DATA at master · bg1bgst333/Sample · GitHub

SetupDiEnumDeviceInterfaces

SetupDiEnumDeviceInterfacesは、デバイスインターフェースデータを列挙する。

SetupDiEnumDeviceInterfaces 関数 (setupapi.h) - Win32 apps | Microsoft Learn
GUIDからデバイスドライバのデバイスインターフェース名を取得する

SetupDiEnumDeviceInterfaces.cppで、

第4引数のiを増やしてループしていく。
SP_DEVICE_INTERFACE_DATA構造体のspdidに中身が入る。

3つ見つかった。
3つ見つかった。

3つ見つかった。

Sample/winapi/SetupDiEnumDeviceInterfaces/SDEDI/src/SetupDiEnumDeviceInterfaces at master · bg1bgst333/Sample · GitHub

sendto

sendtoで、ソケットにメッセージを送る。

Man page of SEND
3-6 単純なUDP送信プログラム:Geekなぺーじ

UDPサーバはrecvfrom.cをそのままで、UDPクライアントsendto.cをつくる。

"quit"が入力されたら、クライアントは接続を終了。
"end"が送信されたら、サーバが落ちる。(前回と同じ。)

"end"の後に"hoge"を入力したが、送信エラーにはならないのか。まあ、どちらにしろ"quit"でクライアント終了。
"end"の後に"hoge"を入力したが、送信エラーにはならないのか。まあ、どちらにしろ"quit"でクライアント終了。

"end"の後に"hoge"を入力したが、送信エラーにはならないのか。まあ、どちらにしろ"quit"でクライアント終了。

Sample/unixsyscall/sendto/sendto/src/sendto at master · bg1bgst333/Sample · GitHub

basic_ofstream::rdbuf

basic_ofstreamにも、rdbufはある。

basic_ofstream::rdbuf - cpprefjp C++日本語リファレンス

basic_ios::rdbufと違い、バッファの取得のみの機能となっている。
basic_ofstream.cppで、

"test.txt"を開いたofsのバッファを取得し、別のストリームであるosのバッファとしてコンストラクタからセットする。

osに出力しても、バッファがofsのモノなので、結果として"test.txt"に書き込まれる。
osに出力しても、バッファがofsのモノなので、結果として"test.txt"に書き込まれる。

osに出力しても、バッファがofsのモノなので、結果として"test.txt"に書き込まれる。

Sample/cpp/basic_ofstream/rdbuf/src/basic_ofstream at master · bg1bgst333/Sample · GitHub

basic_ios::tie

basic_ios::tieは、同期する出力ストリームを設定または取得する。

basic_ios::tie - cpprefjp C++日本語リファレンス

basic_ios.cppで、

// ヘッダのインクルード
#include <iostream> // C++標準入出力
#include <fstream> // C++ファイル入出力
#include <string> // std::string

// main関数
int main(){

  // test.txtへ書き込む用のファイルストリーム.
  std::basic_ofstream<char> ofs("test.txt"); // std::basic_ofstream<char>のofsで"test.txt"を開く.

  // test.txtを読み込む用のファイルストリーム.
  std::basic_ifstream<char> ifs("test.txt"); // std::basic_ifstream<char>のifsで"test.txt"を開く.

  // test.txtに"ABCDE"を出力.
  ofs << "ABCDE"; // 出力演算子でofsに"ABCDE"を出力.

  // ifsで読み込む.
  std::string str; // ifsの内容を格納するstd::stringオブジェクトstr.
  if (ifs >> str){ // 入力演算子でifsで読み込んだ内容をstrに格納する.(失敗した場合, 括弧内は偽となる.)
    std::cout << "str = " << str << std::endl; // strを出力.
  }
  else{ // 失敗の場合.
    std::cout << "(ifs >> str) failed!" << std::endl; // "(ifs >> str) failed!"と出力.
  }

  // プログラムの終了
  return 0; // 正常終了

}

同じファイルのファイル書き込みストリームとファイル読み込みストリームを同時に用意し、書き込んだ後、瞬時に読み込むような処理を書くと、

書き込んだ後の読み込みに失敗する。
書き込んだ後の読み込みに失敗する。

書き込んだ後の読み込みに失敗する。
これは、出力してもフラッシュしないと入力できないからであり、

// ヘッダのインクルード
#include <iostream> // C++標準入出力
#include <fstream> // C++ファイル入出力
#include <string> // std::string

// main関数
int main(){

  // test.txtへ書き込む用のファイルストリーム.
  std::basic_ofstream<char> ofs("test.txt"); // std::basic_ofstream<char>のofsで"test.txt"を開く.

  // test.txtを読み込む用のファイルストリーム.
  std::basic_ifstream<char> ifs("test.txt"); // std::basic_ifstream<char>のifsで"test.txt"を開く.

  // test.txtに"ABCDE"を出力.
  ofs << "ABCDE"; // 出力演算子でofsに"ABCDE"を出力.

  // ofsをフラッシュ.
  ofs.flush(); // std::basic_ostream::flushでフラッシュ.

  // ifsで読み込む.
  std::string str; // ifsの内容を格納するstd::stringオブジェクトstr.
  if (ifs >> str){ // 入力演算子でifsで読み込んだ内容をstrに格納する.(失敗した場合, 括弧内は偽となる.)
    std::cout << "str = " << str << std::endl; // strを出力.
  }
  else{ // 失敗の場合.
    std::cout << "(ifs >> str) failed!" << std::endl; // "(ifs >> str) failed!"と出力.
  }

  // プログラムの終了
  return 0; // 正常終了

}

書き込んだ後にフラッシュをすると、

読み込める
読み込める

読み込める。
この出力及びフラッシュと入力を同期させるのがbasic_ios::tieで、

このように、basic_ios::tieで、ifsとofsを紐づけると、

明示的にflushしなくても読み込める
明示的にflushしなくても読み込める

明示的にflushしなくても読み込める。

Sample/cpp/basic_ios/tie/src/basic_ios at master · bg1bgst333/Sample · GitHub

basic_ofstream

basic_ofstreamで、ファイルへの書き込みができる。

basic_ofstream - cpprefjp C++日本語リファレンス

basic_ofstream.cppで、

コンストラクタで"test.txt"を開いて、出力演算子で"ABCDE"を書き込み。

&quot;ABCDE&quot;を書き込めた。
"ABCDE"を書き込めた。

"ABCDE"を書き込めた。

Sample/cpp/basic_ofstream/basic_ofstream/src/basic_ofstream at master · bg1bgst333/Sample · GitHub

basic_iostream

basic_iostreamは、入出力両方を扱うクラス。

basic_iostream - cpprefjp C++日本語リファレンス

basic_istreamとbasic_ostreamの両方を継承しており、これの派生クラスがファイルを扱うbasic_fstream。
basic_iostream.cppで、

こうしてみた。
basic_iostreamの派生先のbasic_fstreamは、ファイルを扱える。
basic_iostreamは、basic_ostreamの派生なので、putが使える。
basic_iostreamは、basic_istreamの派生でもあるので、getも使える。

こうなる。
こうなる。

こうなる。
実行すると、test.txtに'A'を書き込み、test.txtを読み込み'A'だったことを確認。

Sample/cpp/basic_iostream/basic_iostream/src/basic_iostream at master · bg1bgst333/Sample · GitHub