- ベストアンサー
C言語 fork()について
- C言語でのSystem Call fork()について説明します。
- Visual Studio 2008で実行する際に発生したエラーについて解決方法を教えてください。
- include <unistd.h>について説明します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>#include <unistd.h>もfork()を使うときに必要なものだろう程度に思っているのですが、どうすれば、まずこのプログラムが実行できるんでしょうか? 認識は合っています。 が…… >こちらのサイトの例をvisual studio 2008で実行させてみようと Windows環境にfork()システムコールはありません。 cygwinインストールして、gccでやれば……システムコールではありませんが 動作するかも知れませんが。 # 未検証です。 C言語でも、「環境依存」はする。 というコトです。
その他の回答 (2)
- hanabutako
- ベストアンサー率54% (492/895)
unistd.hは、Unix Standardの略でUnixの標準的なシステムコールを集めたヘッダファイルです。UnixあるいはUnix互換のOSでしか使えません。WindowsはUnixではないので何処を探してもunistd.hなんてヘッダファイルはないと思います。どうしてもこれを使いたい場合は、UnixあるいはUnixもどきのOS (FreeBSDやLinuxなど) をインストールした計算機を用意するか、WindowsでUnixもどきの環境を使うためのソフトウェア集であるcygwinを使うかする必要があるでしょう。(この場合、Visual Studioに付いてくるコンパイラは使えませんが) ちなみに、Windowsでプロセスを作りたい場合はCreateProcessというAPIを使います。http://msdn.microsoft.com/ja-jp/library/cc429066.aspx こいつを使うと新しいプロセスを作ることはできますが、新しく作られたプログラムの先頭から実行するのでfork()というより、fork()後にexecを実行したのと同等の動作になりますけどね。 さらに余談ですが、WindowsとUnixでほぼ似た様なコードを書きつつ並列処理をさせる場合はスレッドを使います。スレッドを作るのはWindowsだと_beginthreadexで、Unixだとpthread_createと関数名も引数も全く違いますが、ここを#ifdefで切り替えて、ハンドルとpthread_t型変数の取り扱いさえ#defineなどで誤魔化せばうまく動きますからね。(昔、バイトでWindows XPとFreeBSDで動くスレッドプールライブラリを作ったことがあります) というわけで、Windowsなのでfork()は使えませんし、unistd.hなんてヘッダファイルもありませんが、あしからず。でも、スレッドだったらかなりいい線いったコードが書けます。
#includeはコンパイル時に、そのファイルをその場所にあるかのように取り込んでくるだけなので、指定のファイルパスにそのヘッダーファイルが必要ということではありませんか? いまは、unistd.hが見つからないという単純なコンパイルエラーですね。 ヘッダーファイル(xxx.h)には、ライブラリ関数の型宣言とかしてあるのでは? いちど内容を確認したほうがいいと思います。 fork()関数の詳細は、関数リファレンスで確認してください。