Linux C++でマルチプロセスプログラミングの方法と参考書籍

このQ&Aのポイント
  • Cent OS + Eclipse CDT でC++プログラミングをはじめたばかりですが、マルチプロセスのアプリを作成したい場合、C++での子プロセス作成や制御方法について探しても情報が少ないです。
  • C++でもforkして子プロセスを作成することは可能ですが、具体的なサンプルソースや参考になる書籍が見つかりません。
  • Linux C++でマルチプロセスプログラミングを学ぶための教材やサイトを教えてください。
回答を見る
  • ベストアンサー

Linux C++ でマルチプロセスプログラミング

Cent OS + Eclipse CDT で C++ プログラミングをはじめたばかりです。 マルチプロセスのアプリを作成したいのですが、C++ での子プロセス作成や その制御方法についてネットで探しても、C言語(の文法)でのやり方は見つかるのですが、 C++でのやりかたは見つかりませんでした。 (C言語を包含してるんだからC言語の文法でもいいじゃんとは言わないでください。。) C++でも fork して子プロセスを作成するということのようですが、 実際のサンプルソースなどが載っているサイトや、 Linux C++ で参考になる書籍があったら教えて欲しいと思います。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

マルチスレッドならboostでできるのかなぁ? >(C言語を包含してるんだからC言語の文法でもいいじゃんとは言わないでください。。) 勉強でやっているなら、勉強がてら自分で実装するというのも手です。 以下、表示がくずれるので空白2文字を全角の空白にしていることに注意 #include <iostream> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> using namespace std; class Process { public:   Process(void (*func)()) {     pid = fork();     if (pid == 0) {       (*func)();       exit(0);     }     else if (pid > 0) {       return;     }     else {       throw "Fail to create child process";     }   }   pid_t wait(void) {     return waitpid(pid, NULL, 0);   } private:   pid_t pid; }; void child_func() {   cout << "I'm child" << endl; } int main(int argc, char *argv[]) {   Process child(child_func);   child.wait();   return 0; }

u_routine
質問者

お礼

回答ありがとうございます。 boost ではマルチスレッド制御はあるのですがマルチプロセス制御はないようでした。 てっきり POSIX に含まれているかと思いきや、そっちにも無いみたいだし。。。 fork を使用したサンプルソース助かります! C言語でのサンプルソースはよくあるんですが、C++に読み替える知識がまだないので困っていました。 今家ではないので、帰ったら試してみたいと思います。

その他の回答 (1)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

C++とLinuxの組み合わせで、C++固有の書き方でプロセスを扱う標準的な方法は存在しないと思います。 Qt (http://qt.nokia.com/)のようなフレームワークを使えばプロセスを扱うためのC++クラス (QProcess http://doc.qt.nokia.com/4.7/qprocess.html) もありますけど、そうでなければCでの書き方と基本的に同じでいいでしょう。

u_routine
質問者

お礼

回答ありがとうございます。 Qt という FW は初めて知りました。 非 VC++ な C++ で GUI が作成したりできるんですね。 Qt を使用するかどうかはもう少しプロセス周りのことを調べてみて決めようと思います。 ネットでは VC++ の情報ばかりなので、こういう情報は助かります。 ありがとうございました。

関連するQ&A

  • LINUXでC言語のプログラミングについて

    私は、現在情報工学科の学生です。現在学校でLINUXの科目を受講しています。私は今まで、学校から出された課題は自分でやってきましたが、この問題だけはどうしても解けず、このような場を借りて、問題のプログラミングについて皆様にご教授をお願いしています。自分でいろいろ調べ、考えてみましたがそれでも自分の知識が足りず、プログラムを作ることができませんでした。プログラムと解説のご教授をお願いします。 OS Linux プログラミング言語 C言語 コンパイル方式 [gcc] *****問題***** #include <manにより調べること> void main(argc, char *argv[]){ int n, fd[2]; char line[MAXLINE]; pid_t pid; if (pipe(fd)<0) exit(1); if ((pid=fork())>0) { /*parent process */ close (fd[0]); write(fd[1], "Hello\n", 6); } else{ /*child process */ close (fd[1]); n = read(fd[0], line, MAXLINE); write (1, line, n);/* write(fileno(stdout), line,n); } else exit(1); /* fork error */ exit (0); } (問題1)上記をもとに親プロセスがキーボードから入力した行をパイプで子プロセスに標準出力ファイルとして送り、子プロセスは標準入力から受けとってスクリーンにエコーバックするようなプログラムを作れ。ヒント:dup2(fd[1],fileno(stdout)), fgets(line, MAXLINE, stdin), fputs(....) (親) (子) キーボード-->| stdin stdout| ---> |stdin stdout|---->ディスプレイ

  • プロセスとスレッドの違いについて(Cプログラミングの観点から)

    プロセスとスレッドの違いがしっくりきません。 <プロセス> (1)プログラムの実行単位。Windows や Linux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される (2)起動や切り替えのオーバーヘッドが大きい <スレッド> (1)同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できる。 (2)マルチスレッド処理のプログラミングにおいては、同じデータを複数のスレッドが同時に書き換えることによる不整合に注意し、排他制御を行う必要がある。 等はwiki等調べて理解しています。 何が疑問なのかと申し上げますと、具体的にプログラミングする際に (1)マルチプロセスとマルチスレッド方式では、ソースにどのような違いが出てくるか (2)マルチプロセスとマルチスレッド方式では実行時間がどれだけ変化するか がわからないのです。お仕事で並列処理等について担当されている方などおられましたら、お手数ですがご教授ください。 なお、わかりやすい書籍、webサイト等ありましたらそれも併せて教えていただけると助かります。よろしくお願いします。ちなみに、環境はWindowsXP,VisualC++ExpressEdition2005を使っていますので、UNIXよりはWindowsかつCで動くプログラム例で教えていただけると大変助かります。しかし、当方Javaも多少であれば組めますのでJavaでも構いません。 何卒、よろしくお願い致します。

  • Linux上でEclipseを使用してC++開発を行う方法

    Linux上でEclipseを使用してC++開発を行う方法が知りたいです。 CDTをプラグインすれば良いとのことですが、情報が少なくいまいち導入手順や特徴が分かりません。 EclipseでのC++開発について詳しく載っている書籍やサイトがありましたら、教えていただきたく思います。 他の開発環境と比べたメリット・デメリットなどの批評なども募集中です!

  • JOGL OpenGLプログラミングについて

    こんにちは。 私は、現在行っている研究にOpenGLによる経路探査シミュレーションを取り入れたいと考えております。 プログラミングの経験はjavaでの知識半年(全てネット上で)しかなく,sunの提供しているJOGL(Java bindings for OpenGL)に挑戦しています。 しかし、JOGLのネット上での情報には限りがあり,JOGLのdocを見ても所々のクラスやメソッドに、interface C language と書いてあったりするだけですので、 Cベースのマニュアルを参照しておりますが言語的になかなか理解することが出来ません。 結局OpenGLは、一からC/C++を勉強してその環境でやるべきか悩んでいます。 これまでEclipse上でjavaプログラミングをしていたのでVisualStudio(Visual C++)に挑戦しようと思ってもなかなか補完などの処理にどうしてもとっつきづらい感があります。 JOGLのプログラミングマニュアルやサイト(英語可)で有能なものがありましたら教えていただけませんでしょうか? またJOGLよりも有能なjava bindingがありましたら教えていただけませんでしょうか? もし,C/C++をお奨めされる方の中でEclipse + CDTを使っていらっしゃる方がいましたらCDTに関するお奨めのサイトもしくは本がありましたら,教えていただけませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • ソケットプログラミングについて

    ソケットプログラミング(ネットワーク?)をはじめようと思うのですが(使用する言語はCあるいはC++) その場合のOSとして UNIX、Linux、Windows のどれが適しているでしょうか ちなみに、メールサーバや、APACHの様なHTTPサーバを作れる様にまでなりたいです (その他にもFTP等) ちなみに私はUNIXや、Linuxだと思っていますが、Windows との文法の違いはどれくらいあるのでしょうか

  • 業務でC言語の開発環境は?

    VCではなく、 Unixで動くC言語の開発環境は 業務の場合、どういったものを使っていますか? Eclipse + CDT ですか?

  • 今Mac上でEclipseを使ってC言語のプログラミングをしているので

    今Mac上でEclipseを使ってC言語のプログラミングをしているのですが、EclipseのデータをMercurialを使って管理する(バックアップをとる)方法はないでしょうか? ターミナル上でMercurialを使う方法はなんとか分かったのですが、Eclipse上で使えるようにするにはどうすればいいか分かりません。 もし方法やソフトなどを知っている方がいましたら、やり方やサイトなどを教えてください。

  • WiFiのプログラミングについて

    WiFiのプログラミングについて LINUXでC言語でどなたかWiFiのプログラミング方法についてご存知ないですか? RAWパケットの送受信、ヘッダーの作成、プロトコル自体についても何か掲載しているサイトや本についても教えていただけませんか? よろしくお願いします。

  • プロセス?ブロック?

    職場でC, C++で開発を行っているのですが、 最近、技術ミーティングなどで「プロセス」とか「プロセスをブロック」など の言葉を聞き、意味が良く分からず困っています。 OSのプロセススケジューリングによりブロックが起こるというような 基本的なことは分かっていますが、それをどのようにプログラミングで実装してよいのかが分かりません。 概要だけでしたらlinuxカーネルなどの基礎があればよいと思うのですが、 プログラミングで実践的にプロセスの扱い、プロセスとはこういうものだ!ということを学べる書物がありましたら教えてください。 具体的な書物でなくても、「マルチスレッドの本」というアドバイスでも結構です。 よろしくおねがいします。

  • Linuxで、標準Cライブラリが読み込まれず、C言語プログラミングができません・・・

    僕の問題はタイトルの通りで、標準Cライブラリが読み込まれていないようで、C言語プログラミングができません。 ubuntuのオフィシャルから日本語ローカライズドDesktopCDをダウンロードして、空のHDDにインストールしました。 ですが、gnome-terminalからccコマンドでプログラムをコンパイルしても、標準Cライブラリにあるはずの<stdio.h>が認識されず、続くprinft関数も読んでくれません。 これはどうしてでしょうか?LinuxはデフォルトでCやらJAVAやらのプログラミングの環境が整っているものだと思っていたので、戸惑っています。何か、セットアップが必要なのでしょうか。 ちなみに、gccでも、標準ライブラリは読み込まれませんでした。

専門家に質問してみよう