タグ別アーカイブ: C++

system関数とpopen関数を適当に選んではいけない

CやC++で、プログラムから他のコマンドを実行する方法はいくつかあると思います。

それらの内、system関数やpopen関数を使うのが、とりわけ簡単かと思いますが、これらを適当に選んではいけない、という事態に遭遇したので、せっかくなのでsystem関数とpopen関数の違いや選び方とかを交えながらブログのエントリにしておきます。

まず、system()とpopen()の違いを簡単に言うと、コマンドを実行する際、標準入力に書き込んだり標準出力への出力を利用したりしたい場合はpopen()を、ただ実行すれば良いだけなら、system()を使うべきです。

標準入力/出力が使える、という機能が増えているだけなら、いつでもpopenでもいいじゃないか!と思いきや、そこに罠(!?)があったのです!

続きを読む


pthread_createで作ったスレッドからクラスのメンバ関数を呼ぶ

C++で、pthread_createで作ったスレッドから、クラスのstaticではないメンバ関数を呼びます。

 


pthreadCallMethod.cpp

 

実行結果

$ g++ pthreadCallMethod.cpp -o pthreadCallMethod -lpthread
$ ./pthreadCallMethod.exe
Called successfully, number = 5

 


C++でファイルやフォルダが存在するかどうかを確認する

C/C++で、ファイルやフォルダが存在するかどうかを、stat関数の戻り値を用いて確認します



checkExist.cpp

実行結果:

$ g++ checkExist.cpp -o checkExist
$ touch file
$ mkdir directory
$ ./checkExist
0
0
-1

 


C++でString (char配列)をintegerに変換する方法

C++でString (char配列)をintegerに変換する方法

実現方法は色々あると思いますが、その内の一つをご紹介。

atoi.cpp

実行結果:
$ g++ atoi.cpp
$ ./a
std::atoi(string123.c_str()) is 123(int)
atoi(str) = 0


C++ の std::map のキーに構造体を使う方法と、ハマったこと

C++のstd::mapのキーに、自分で定義した構造体やクラスを使うことができます。

その際、std::mapはデータを2分木で格納しているため、キーになる構造体やクラスに、比較演算子 < を定義してあげる必要があります。

自分で作った構造体やクラスだと、二つ提示されてもどっちが大きいとか小さいとかわからないもんね!

というわけで、以下は、intとchar[100]をもった構造体をキーとしたい場合のサンプル。

続きを読む