SP_DEVICE_INTERFACE_DATA構造体に、デバイスインターフェースデータが格納されている。
SP_DEVICE_INTERFACE_DATA (setupapi.h) - Win32 apps | Microsoft Learn
SP_DEVICE_INTERFACE_DATA.cppで、
前回、Reservedだけ変わってるのをデバッガで見たので、値を出力してみた。
これじゃ全然わからんけど・・・。
SP_DEVICE_INTERFACE_DATA構造体に、デバイスインターフェースデータが格納されている。
SP_DEVICE_INTERFACE_DATA (setupapi.h) - Win32 apps | Microsoft Learn
SP_DEVICE_INTERFACE_DATA.cppで、
前回、Reservedだけ変わってるのをデバッガで見たので、値を出力してみた。
これじゃ全然わからんけど・・・。
SetupDiEnumDeviceInterfacesは、デバイスインターフェースデータを列挙する。
SetupDiEnumDeviceInterfaces 関数 (setupapi.h) - Win32 apps | Microsoft Learn
GUIDからデバイスドライバのデバイスインターフェース名を取得する
SetupDiEnumDeviceInterfaces.cppで、
第4引数のiを増やしてループしていく。
SP_DEVICE_INTERFACE_DATA構造体のspdidに中身が入る。
3つ見つかった。
sendtoで、ソケットにメッセージを送る。
Man page of SEND
3-6 単純なUDP送信プログラム:Geekなぺーじ
UDPサーバはrecvfrom.cをそのままで、UDPクライアントsendto.cをつくる。
"quit"が入力されたら、クライアントは接続を終了。
"end"が送信されたら、サーバが落ちる。(前回と同じ。)
"end"の後に"hoge"を入力したが、送信エラーにはならないのか。まあ、どちらにしろ"quit"でクライアント終了。
Sample/unixsyscall/sendto/sendto/src/sendto at master · bg1bgst333/Sample · GitHub
basic_ofstreamにも、rdbufはある。
basic_ofstream::rdbuf - cpprefjp C++日本語リファレンス
basic_ios::rdbufと違い、バッファの取得のみの機能となっている。
basic_ofstream.cppで、
"test.txt"を開いたofsのバッファを取得し、別のストリームであるosのバッファとしてコンストラクタからセットする。
osに出力しても、バッファがofsのモノなので、結果として"test.txt"に書き込まれる。
Sample/cpp/basic_ofstream/rdbuf/src/basic_ofstream at master · bg1bgst333/Sample · GitHub
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しなくても読み込める。
Sample/cpp/basic_ios/tie/src/basic_ios at master · bg1bgst333/Sample · GitHub
basic_ofstreamで、ファイルへの書き込みができる。
basic_ofstream - cpprefjp C++日本語リファレンス
basic_ofstream.cppで、
コンストラクタで"test.txt"を開いて、出力演算子で"ABCDE"を書き込み。
"ABCDE"を書き込めた。
Sample/cpp/basic_ofstream/basic_ofstream/src/basic_ofstream at master · bg1bgst333/Sample · GitHub
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