
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) Arduinoに関する質問 4 2023/08/07 21:19
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
sleep()関数について
-
sendkeysにてALT+CTRL+INSERTを...
-
C言語でプログラムを再起動
-
プログラムの再起動
-
終了してもプログラムが実行し...
-
VB上で実行中の無限ループの止め方
-
VBAで外部プログラムを非表示で...
-
cygwin上でのgtkの画像表示につ...
-
並列計算をしたときのシステム...
-
システム資源とは?
-
プリントスクリーンをプログラ...
-
RPG パラメーターについて
-
C言語で途中までしか、プログラ...
-
GNU Octaveで実行途中に表示さ...
-
メトロノームが一定のリズムで...
-
プロセス間通信について
-
”行数のカウント”はどうすれば...
-
パソコンの演算速度について
-
VB.NETで作ったプログラムがサ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
sendkeysにてALT+CTRL+INSERTを...
-
RPG パラメーターについて
-
他の実行ファイルを実行するプ...
-
VBAで外部プログラムを非表示で...
-
実行時エラー429
-
C言語でフォルダを開く
-
VB上で実行中の無限ループの止め方
-
C言語でプログラムを再起動
-
プロセス間通信について
-
アクセス[ファイルを開かずに、...
-
C言語で途中までしか、プログラ...
-
終了してもプログラムが実行し...
-
並列計算をしたときのシステム...
-
vba GetAsyncKeyState関数について
-
Excel VBA から外部プログラム...
-
C言語でコマンドラインのカレン...
-
システム資源とは?
-
Borland C++Builder6で、デバッ...
-
バックグラウンドからフォアグ...
おすすめ情報