の後にプログラムを実行すると、私はmain関数forkで2つのプロセスを作成します。子プロセスは何かを行い、親プロセスは再びforkされ、子プロセスは別の関数を呼び出します。両方の関数は1つのファイルに書き込み、すべて正常に動作します。 私が必要とするのは、両方の関数とすべてのプロセス(両方の関数がプロセスを作成する)の後に、ファイルの最後に何かを書くことです。 私はfprintfコマンドをメインのどこにでも書き込もうとしましたが、それは常にファイルの途中に書き込むので、メインは2つの関数と並行して実行されると思います。 私はセマフォーを使用しようとしました s = sem_open(s1, o_CREATE, 0666, 0);
このようにして、各関数の最後にはsem_post(s)
を書きました。メインにはsem_wait(s); sem_wait(s);
と書いてありましたが、fprintfコマンドを書いても動作しませんでした。 これを解決する方法はありますか? ありがとう私のプログラムで "fork部分"
0
A
答えて
1
私はあなたがwait
機能を探していると思います。 this stack overflow question:wait(NULL)
を参照してくださいすべての子どもたちが終了するのを待ちます子プロセスが完了するのを待っています(ジョナサン・レフラーに感謝します)。ループ内でwait
を呼び出すと、すべての子プロセスが終了するまで待機します。親プロセスのファイルに書き込む直前にその関数を使用してください。
すべてのプロセスではなく特定のプロセスを待つ場合は、waitpid
関数についても読むことができます。
編集: また、実際にはプロセス全体でセマフォを使用できますが、もう少し作業が必要です。 this stack overflow answerを参照してください。基本的な考え方は、関数sem_open
をO_CREAT
定数で使用することです。 sem_open man pageから
sem_t *sem_open(const char *name, int oflag);
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
:あなたの親プロセスで
If O_CREAT is specified in oflag, then two additional arguments must be supplied. The mode argument specifies the permissions to be placed on the new semaphore, as for open(2). (Symbolic definitions for the permissions bits can be obtained by including <sys/stat.h>.) The permissions settings are masked against the process umask. Both read and write permission should be granted to each class of user that will access the semaphore. The value argument specifies the initial value for the new semaphore. If O_CREAT is specified, and a semaphore with the given name already exists, then mode and value are ignored.
、モードおよび値パラメータを持つsem_open
を呼び出す与えるsem_open
は2つの関数のシグネチャを持っていますそれは必要な権限です。子プロセスでは、そのセマフォを開いて使用するためにsem_open("YOUR_SEMAPHORE_NAME", 0)
を呼び出します。
関連する問題
- 1. fork()とシグナルハンドリングのプログラム
- 2. のプログラム部分提出
- 3. プログラムで別の部分にムービーファイルを分割する方法は?
- 4. elfファイルのデータ部分を分離するCプログラム
- 5. イメージファイルを4つの部分に分割するJavaプログラム
- 6. ルビー:私のインデックスページで部分的
- 7. _form部分未定義のメソッド `staticpages_path」エラー私の部分で間違っ
- 8. チェーンされたncursesプログラムのターミナルのサイズ変更(fork/exec/wait)
- 9. matplotlibで色分けされた線の部分をプログラムする方法
- 10. は、私は部分的なビューを持つ部分
- 11. fork()システムコールのコンセプト
- 12. FastCGI fork in c
- 13. 私の関数はjavaで数秒間forkできますか?
- 14. 私のリンクリストノード削除機能により、私のプログラムの他の部分がクラッシュする
- 15. 私のプログラムは私のコードの特定の部分を使用していません
- 16. forkシステムコールのアプリケーション
- 17. freeBSD unixのfork
- 18. fork()のオーバーロード
- 19. このCプログラムでfork()はどのように動作しますか?
- 20. プログラムからforkしたときにdataflow_exceptionを有効にする
- 21. unix-fork-monitor-child-progress
- 22. HAMLのパーシャル部分は、私は、コントローラ
- 23. のRails:部分コレクションをレンダリング:私は部分的にレンダリングしたいアイテムのコレクション
- 24. プログラム受信信号SIGBUS:メモリオブジェクトの未定義部分へのアクセス
- 25. Javaループを使用してプログラムの別の部分に戻る
- 26. どのように私のプログラムの速度を知るには、コードのどの部分がボトルネックですか?
- 27. ジョブを2つのスレッドに分割して使用wait、waitpid、fork
- 28. cygwinでforkを使用してプログラムをコンパイルするときの問題
- 29. 私のプログラムで
- 30. Cのプロセス:fork()scope
'fork'は*並列処理ではありません* - これは誤った用語です。 – t0mm13b