私は、Cのプログラムで、いくつかのプロセスが埋め込みLinux上の共有メモリにアクセスする必要があることに取り組んでいます。この共有メモリは、作成時に初期化する必要があります。このメモリに接続されているプロセスはクラッシュする可能性があります。再起動すると(linux INITによって)、他のプロセスがそれを使用しているので、共有メモリを再び初期化してはなりません。共有メモリを作成しているプロセスの現在の開始が初めてであるか、再起動されたかを確認する方法。私は、このメモリが初期化されたと主張するために、5678956(ffffffffまたは00000000以外の任意の数)のような数値として書き込まれる共有メモリに整数を割り当てるアイデアを考え出しました。しかし、重要なデータがこのメモリを格納しているので、これがうまくいけばよく分かりません。アドバイスをいただければ幸いです。ありがとう。プロセスが最初に起動するかどうかを確認する方法
3
A
答えて
4
共有セマフォと共有メモリセグメントの両方を使用する必要があります。 sem_open
でセマフォを開こうとします。O_EXCL|O_CREAT
と初期値は0です。成功した場合は、共有メモリセグメントを作成して初期化し、セマフォをポストして閉じます。シームフォアを排他モードで開くのに失敗した場合は、それを非排他的に開き、セマフォを待ってから閉じます。
あなたが望むならば、別の解決方法:ファイルシステム内で、mmap
とMAP_SHARED
という名前の共有ファイルを使用してください。最初に一時的な名前のファイルを作成し、それに含めるべき初期データを入力します。その後、実際の名前にlink
を試してください。 link
がEEXIST
で失敗した場合は、最初のプロセスではなく、一時ファイルを削除して既存のファイルを開いてマップすることができます。 link
が成功した場合は、最初のプロセスです。
関連する問題
- 1. 外部WPFプロセスやその他のプロセスが起動したかどうかを確認する方法は?
- 2. プロセスが再起動したかどうかを確認
- 3. プロセスがビジー状態かどうかを確認する方法
- 4. httpsサイトが起動しているかどうかを確認する方法
- 5. コンソールアプリケーションがコンソールウィンドウから起動したかどうかを確認する方法
- 6. 起動が最初に起動し、チュートリアル-LibGDXが含まれているかどうかを確認する方法
- 7. C#の - どのようにプロセスが正常に起動したかどうかを確認するために
- 8. iOSデバイスが起動後に再起動されたかどうかを確認する方法
- 9. MySQLサーバが起動しているかどうかを確認する最善の方法
- 10. FFmpegプロセスが完了しているかどうかを確認する方法
- 11. プロセスが子プロセスであるかどうかを確認する方法はありますか?
- 12. プロセスに存在するかどうかを確認するバッチスクリプト
- 13. アプリケーションがデスクトップショートカットから起動しているかどうかを確認する方法はありますか?
- 14. レコードが存在するかどうかを確認する最速の方法
- 15. プロセスが実行中かどうかを確認するLinuxスクリプト
- 16. プロセスが実行中かどうかを確認するNSTask
- 17. どうかを確認する方法
- 18. x-sendfileが起動しているかどうかを確認する方法はありますか?
- 19. 初めてアプリを起動する方法を確認するには?
- 20. ファイルサイズが最大ファイルサイズを超えるかどうかを確認する方法
- 21. Windowsが再起動したかどうかを確認するには?
- 22. コンテナが最新であるかどうかを確認する方法
- 23. サーバが再起動を必要とするかどうかを確認する方法
- 24. Webアプリケーションが起動しているかどうかを確認する
- 25. プログラムが起動しているかどうかを確認する
- 26. SQLServerのインストールを再起動する必要があるかどうか確認
- 27. サーバが起動しているかどうかを確認する
- 28. 暴動タグが存在するかどうかを確認する方法は?
- 29. OpenMPがC++プログラムで動作するかどうかを確認する方法
- 30. winformの起動に5秒以上かかるかどうかを確認する方法?
名前付きファイルを 'tmpfs'ファイルシステムに作成して、物理ディスクに触れることさえできません。 – caf
はい、実際には、POSIXが通常のファイルシステムのセマンティクスで '/ dev/shm'を定義するのではなく、醜い' shm_open'インタフェースを指定するのはむしろ面倒です。共有メモリオブジェクトを '名前を変更する'/'リンクする'ことができないと、そうでない場合よりもあまり有用ではありません。 –
あなたの答えをありがとう。 –