C言語 fork()について
C言語でSystem Call fork()というものがあるそうで、まずは
http://cai.int-univ.com/sugsi/Lecture/NetProg/ch …
こちらのサイトの例をvisual studio 2008で実行させてみようと思ったのですが、以下のエラーが表示されてしまいました。
1>c:\users\user\documents\visual studio 2008\projects\project1\system call fork\system call fork\system call fork.cpp(3) : fatal error C1083: include ファイルを開けません。'unistd.h': No such file or directory
ソースは以下のものです。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int pid;
char msg[256];
sprintf(msg, "hello world");//sprinf()でmsgにhello worldを格納する
pid = fork();
if(pid == 0)
printf("%s, child process\n", msg);
else
printf("%s, parent process\n", msg);
return 0;
}
#include <unistd.h>について注意されていますが、これは何なのでしょうか?
#include<stdio.h>ならprintf()などの基本的な関数を使うのに必要なものと覚えたので、
#include <unistd.h>もfork()を使うときに必要なものだろう程度に思っているのですが、どうすれば、まずこのプログラムが実行できるんでしょうか?
No such file or directoryと書かれているぐらいですから、下準備としてこのプロジェクトが保存されている場所でtxtファイルか何かを準備しておく必要があるということですかね...
No.2ベストアンサー
- 回答日時:
>#include <unistd.h>もfork()を使うときに必要なものだろう程度に思っているのですが、どうすれば、まずこのプログラムが実行できるんでしょうか?
認識は合っています。
が……
>こちらのサイトの例をvisual studio 2008で実行させてみようと
Windows環境にfork()システムコールはありません。
cygwinインストールして、gccでやれば……システムコールではありませんが
動作するかも知れませんが。
# 未検証です。
C言語でも、「環境依存」はする。
というコトです。
No.3
- 回答日時:
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 …
こいつを使うと新しいプロセスを作ることはできますが、新しく作られたプログラムの先頭から実行するのでfork()というより、fork()後にexecを実行したのと同等の動作になりますけどね。
さらに余談ですが、WindowsとUnixでほぼ似た様なコードを書きつつ並列処理をさせる場合はスレッドを使います。スレッドを作るのはWindowsだと_beginthreadexで、Unixだとpthread_createと関数名も引数も全く違いますが、ここを#ifdefで切り替えて、ハンドルとpthread_t型変数の取り扱いさえ#defineなどで誤魔化せばうまく動きますからね。(昔、バイトでWindows XPとFreeBSDで動くスレッドプールライブラリを作ったことがあります)
というわけで、Windowsなのでfork()は使えませんし、unistd.hなんてヘッダファイルもありませんが、あしからず。でも、スレッドだったらかなりいい線いったコードが書けます。
No.1
- 回答日時:
#includeはコンパイル時に、そのファイルをその場所にあるかのように取り込んでくるだけなので、指定のファイルパスにそのヘッダーファイルが必要ということではありませんか?
いまは、unistd.hが見つからないという単純なコンパイルエラーですね。
ヘッダーファイル(xxx.h)には、ライブラリ関数の型宣言とかしてあるのでは?
いちど内容を確認したほうがいいと思います。
fork()関数の詳細は、関数リファレンスで確認してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Windowsでのfork方法
C言語・C++・C#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
UWSCがうまく動かない
-
c++からfortranの関数を呼び出す
-
clock関数は正確じゃないの?
-
ヘッダファイル? malloc.hと...
-
他のPC上にあるexeを、そのP...
-
環境:Windows XP
-
sendkeysにてALT+CTRL+INSERTを...
-
cc -o sample sample.c cc -o s...
-
緯度、経度の 10進法と 60進法...
-
C# シリアル通信でデータ受信...
-
このレジの並び方は間違ってま...
-
マージャンのゲームを作りたい...
-
プロセス終了の検知について
-
VBA kernel32 の意味
-
Arduinoのプログラムで質問です。
-
家電製品の電力周波数を変える機械
-
isoをimgに変換したいのですが...
-
Mac 乗数の入力方法
-
N88BASICのバイナリデータをテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
sendkeysにてALT+CTRL+INSERTを...
-
VBAで外部プログラムを非表示で...
-
実行時エラー429
-
並列計算をしたときのシステム...
-
C言語で途中までしか、プログラ...
-
C言語でプログラムを再起動
-
VB上で実行中の無限ループの止め方
-
プログラムを走らせる
-
Excel VBA から外部プログラム...
-
他のPC上にあるexeを、そのP...
-
RPG パラメーターについて
-
他の実行ファイルを実行するプ...
-
Windows10でDOSゲーム
-
プロセス間通信について
-
終了してもプログラムが実行し...
-
アクセス[ファイルを開かずに、...
-
ラズパイ プログラム 自動起動 ...
-
ヘッダファイル? malloc.hと...
-
システム資源とは?
おすすめ情報