質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

2回答

2591閲覧

MinGWにて#include <sys/wait.h>のインクルードに失敗する。

hashibiro

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

0クリップ

投稿2022/12/04 02:05

waitpid() を使用するためsys/wait.hをインクルードすると
以下のエラー文が出ます。
windows環境なためsys/wait.hが使えないのでしょうか。
その場合、必要なインストール方法・gccのオプション指定等もご教授いただければ幸いです。

gcc -pthread .\variablesProc.c -lws2_32 .\variablesProc.c:5:10: fatal error: sys/wait.h: No such file or directory #include <sys/wait.h>

C

1#include <pthread.h> 2#include <unistd.h> 3#include <stdlib.h> 4#include <stdio.h> 5#include <sys/wait.h> 6#include <sys/types.h> 7#define _WIN32_WINNT 0x0501 8#include <winsock2.h> 9 10int varA; 11 12void ProcessFunc(int n){ 13 int varB; 14 15 varB = 4+n; 16 printf("threadFunc-%d-1: varA=%d, varB=%d\n",n,varA,varB); 17 varA = 5+n; 18 printf("threadFunc-%d-2: varA=%d, varB=%d\n",n,varA,varB); 19 sleep(2); 20 printf("threadFunc-%d-3: varA=%d, varB=%d\n",n,varA,varB); 21 varB = 6+n; 22 printf("threadFunc-%d-4: varA=%d, varB=%d\n",n,varA,varB); 23 24 exit(0); 25} 26 27int main(void){ 28 pid_t process1,process2; 29 int varB; 30 31 32 varA = 1; varB = 2; 33 printf("main-1: varA=%d, varB=%d\n",varA,varB); 34 if((process1 = fork()) == 0){ 35 //this is child process 36 processFunc(1); 37 } 38 //this is process 39 sleep(1); 40 varB = 3; 41 42 printf("main-2: varA=%d, varB=%d\n",varA,varB); 43 if((process2 = fork()) == 0){ 44 //this is process 45 processFunc(2); 46 } 47 //this is process 48 waitpid(process1, NULL, 0); 49 waitpid(process2, NULL, 0); 50 printf("main-3: varA=%d, varB=%d\n",varA,varB); 51 52 return 0; 53}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

waitpid はシステムコール (をラップした関数) です。 簡単に言えば OS の機能を呼び出す窓口として提供されており OS がその機能を持っていなければ使えません。 結論としては Windows には waitpid は有りません。

同じではありませんが相当する機能と言えるものは Windows にも有り、プロセスの変化 (など) を監視するのは WaitForSingleObject API が使えます。

OS によってプロセスの管理方法やプロセス間通信の仕組みは異なります。 総合的な仕組みが違うのでそれに合わせてプログラムを書き換える必要があります。

または Windows 上で総合的に POSIX 風に振る舞う互換レイヤとして Cygwin があるので手っ取り早く移植することが目的であればこれを導入するというのでもよいでしょう。

投稿2022/12/04 05:36

SaitoAtsushi

総合スコア5437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ぐぐってみると,
https://7shi.hateblo.jp/entry/2012/06/19/213405
のように,process.hをインクルードして_cwait関数でラップしてとりあえず対応している例があるようですね。

投稿2022/12/04 08:29

ujimushi_sradjp

総合スコア2066

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問