CやC++で、プログラムから他のコマンドを実行する方法はいくつかあると思います。
それらの内、system関数やpopen関数を使うのが、とりわけ簡単かと思いますが、これらを適当に選んではいけない、という事態に遭遇したので、せっかくなのでsystem関数とpopen関数の違いや選び方とかを交えながらブログのエントリにしておきます。
まず、system()とpopen()の違いを簡単に言うと、コマンドを実行する際、標準入力に書き込んだり標準出力への出力を利用したりしたい場合はpopen()を、ただ実行すれば良いだけなら、system()を使うべきです。
標準入力/出力が使える、という機能が増えているだけなら、いつでもpopenでもいいじゃないか!と思いきや、そこに罠(!?)があったのです!
続きを読む →
読書会をしていたらこの話が出てきたので、せっかくなのでまとめておきます。
C++でfork()を使ってプロセスを生成する
続きを読む →
C++で、文字列中の指定した文字列を指定した文字列に置き換えます
(自分で書いておいてなんだけど、ややこしや…)
replaceString.cpp
続きを読む →
C++で指定したディレクトリが空かどうかをチェックします
checkDirEmpty.cpp
続きを読む →
C++で、pthread_createで作ったスレッドから、クラスのstaticではないメンバ関数を呼びます。
pthreadCallMethod.cpp
実行結果
$ g++ pthreadCallMethod.cpp -o pthreadCallMethod -lpthread
$ ./pthreadCallMethod.exe
Called successfully, number = 5
C/C++で、ファイルやフォルダが存在するかどうかを、stat関数の戻り値を用いて確認します
checkExist.cpp
実行結果:
$ g++ checkExist.cpp -o checkExist
$ touch file
$ mkdir directory
$ ./checkExist
0
0
-1
C++でString (char配列)をintegerに変換する方法
実現方法は色々あると思いますが、その内の一つをご紹介。
atoi.cpp
実行結果:
$ g++ atoi.cpp
$ ./a
std::atoi(string123.c_str()) is 123(int)
atoi(str) = 0
C++のstd::mapのキーに、自分で定義した構造体やクラスを使うことができます。
その際、std::mapはデータを2分木で格納しているため、キーになる構造体やクラスに、比較演算子 < を定義してあげる必要があります。
自分で作った構造体やクラスだと、二つ提示されてもどっちが大きいとか小さいとかわからないもんね!
というわけで、以下は、intとchar[100]をもった構造体をキーとしたい場合のサンプル。
続きを読む →
ryosukeによる、ためになる(かもしれない)情報など