• ベストアンサー

lockfについて

charmer29-2の回答

回答No.2

#1さんの回答を踏まえて。 強制ロックはHP-UXでは使えないかもしれません。 その辺りはHP-UXのマニュアルページで確認してください。 さて、では強制ロックする汎用的な方法はあるでしょうか。 結論から言うと、ありません。 ぐぐれば判ると思いますが、概ね次のようなアプローチがあります。 ・対象ファイルの属性を変更する ・対象ファイル名を変更する 実際にはプロセスが中断したときのことなどを考えると色々厄介です。 そのファイルにアクセスするのが自分が掌握できるプロセスだけならアドバイザリロックでいいんですけどねぇ。

noname#21460
質問者

補足

ご回答ありがとうございます。 1つ記述するのを忘れていました。 1つのソースに共通関数としてそのファイルにアクセスする関数を全て記述しています。 (書込み側open関数,write関数,close関数、読込み側open関数,read関数,close関数) また、書込み側、読込み側がそれぞれ1プロセスのみと制限しています。 であれば、強制ロックをしなくてもアドバイザリロックで 大丈夫と言う事でしょうか? lockfは完全にロックするのかと思っていましたので、 書込む際にlockfをし、読み込み関数には入れていませんでした。 readする前にlockfをし、チェックを行えば問題なさそうですよね? しかし、読込み側のopen処理はO_RDONLYでopenしているので O_RDWRにしてあげなければならないのでしょうか?

関連するQ&A

  • OSがHP-UX 11i のsendmail

    OSがHP-UX 11i のsendmailについて教えてください。 HP-UX 11iのrootに送付されたメールを他のメールサーバに転送 したいのですがどのようにしたらよいかご教授して頂きたくよろしく お願いいたします。 HP-UX 11iにはsendmail自体は、インストールした記憶がないので すがすでにプロセスが起動しております。(バージョン不明) aliaseファイルにrootにきたファイルを転送したいメールアドレス に設定しnewaliaseコマンドを実行するのはわかるのですが、どの メールサーバに転送するという設定がくわしくわかりません。 【質問1】 sendmail.cfまたはsendmail.mcを修正するのはわかるのですが 設定方法がいまいち分かりません。(HP-UX 11iの場合) 【質問2】 sendmail以外にインストールソフトがございますでしょうか? (コンパイルするソフト等必要でしょうか?) よろしくお願いいたします。

  • ロックファイルが消える

    ファイルロックにflockを使っているのですが、複数のファイルを扱うので、データファイルにロックをかけるのではなく別途「ロックファイル」に対してロックをかけています。 データファイルであれば読み書きモードで開く必要がありますが、ロックファイルは中身はどうでも良いので、 open(LOCK,"> $lockfile") or die ~ というように上書きモードで開いて良いとする解説を読んだので、そのようにしています。 しかし、ごくたまにロックファイルが消えてしまう現象が発生します(なかなか再現できずに条件など特定できず)。 あくまでもファイルの中身が壊れるとかいうことではなくて、ファイルそのものが消えます。 そこでお聞きしたいのですが、 1. ロックをかけたファイルが何らかの原因で消えた場合、ロック状態も消失してしまう(他プロセスがロックできてしまう)のでしょうか? 試してみたのですが、  まずプロセスAがロックをかけて  プロセスBが同ファイルにロックをかけようとすると、失敗する  プロセスAがロック解除せずにファイルを削除する  それでもプロセスBはロックに失敗する  プロセスAが(もう存在しないファイルの)ロックを解除(close)する  するとプロセスBはロックに成功する ということは分かったのですが、上記を、プロセスAがファイルを削除した後にプロセスBを動かすと、どういうわけかロックに成功してしまいます。 2. 複数プロセスが同時に上書きモードでopenしようとするのが消える原因なら、ロックファイルであってもやはり読み書きモードで開くべきなのでしょうか。そしてそれなら消えることは無いのでしょうか。 (読み込みモードではロックできないという解説もありました。) 御教授のほどよろしくお願いいたします。

  • Javaで自分のプロセスIDが取得したい

    Java言語でバッチアプリケーションを製作しています。 "自分のプロセスIDと同じ名前のファイルを検索する"必要があるのですが、Javaでそのようなことができるのでしょうか。 自分のプロセスIDが"1234"だとしたら、対象ディレクトリの"1234"というファイルを検索するというようなものです。 OSはWindowsXPまたはHP/UXです。

    • ベストアンサー
    • Java
  • PerlとPHPで同一ファイルをファイルロック

    PerlとPHPで同一のファイルを読み書きする必要があるのですが、ファイルロックする機構を作るには互いの言語でmkdirで対応したほうがよいのでしょうか? flock関数がPerlにもPHPにもありますが、これは、PHPのプロセスで実行したロックの状態をPerlで検知したり、または逆のことはできないのでしょうか? もしできないとするとmkdirで同一の機構を作ったほうが良い気もしますが、何か問題などは起きないでしょうか。

    • ベストアンサー
    • PHP
  • Linux環境におけるgetprocs関数

    お疲れ様です、初めてLinux環境で開発(C言語)している者です。 流用元(HP-UX環境/C言語)のソースをコンパイルしたところ、 「getprocs」(プロセス情報の取得?)という関数でエラーになりました。 <procinfo.h>というヘッダをincludeしているのですが、 このヘッダファイルも見当たりません。 Linuxでは、使用できない関数なのでしょうか? また、代替手段などあるのでしょうか? getprocs自体、ネットで調査してもあまり有力な情報をヒットできず、苦慮してます。 ご存じの方おりましたら、ご教授よろしくお願いいたします。

  • ファイルが削除できません。

    あるファイルがプロセスによってロックされているため削除できません。 どのプロセスがロックしているか調べる方法はありますでしょうか? OS:WindowsXP よろしくお願いいたします。

  • JNIからCのメッセージキューが使用できない

    JAVAからJNIを使用してC言語の関数呼び出しを行っています。 C側の関数は内部でmsgrcv()とmsgsnd()を呼び出しているのですが、どちらも処理が正常終了しているにもかかわらず、メッセージ自体の送信(受信)ができていません。しかしながらメッセージ長は正常に取得できている状態です。 このような現象でどういったことが考えられるのでしょうか。 環境は OSがHP-UX11、 JDKのバージョンが1.5です。 宜しくお願い致します。

  • ファイルのロックについて

    C言語初心者です。OSはHP-UXを使っています。 AプログラムXXXファイルに書込みます。 しかし、BプログラムではXXXファイルを読込みます。 Aのプログラムが書込んでいる最中、Bは読込ませたくありません。 lockfにてAプログラムでXXXファイルをロックしているのですが BプログラムではXXXファイルを読む事ができます。 なぜでしょうか? BプログラムでもXXXファイルをlockfする必要がありますか? よろしくお願いします。

  • UNIXのCPU負荷の自動検知法

    HP-UX11ですが、1日に1回、1分間だけCPUの負荷が100% 近くになってしまいとても困っています。 原因となるプロセス名はわかっているので本来はそのバグ を修正すべきなのでしょうが、事情がありそれがなかなか 出来ない状態なので、CPUに負荷がかかったらそのプロセス を殺すとしくみを自動検知で作りたいのですが、その検知 方法がわかりません。 PSをポーリングするというのはそ れ自体が負荷となるのでNGです。 よろしくお願いします。

  • 共有メモリでのデータ読み書きについて

    Linuxで共有メモリを複数プロセスで読み書きする場合について質問させて頂きます。 CPUは32ビットで、共有メモリ上の、int(32ビット)の領域を 複数のプロセスで読み書きする場合を想定した場合、 セマフォ等でロックした方が良いのでしょうか? または、CPUが1命令で読み書きすることが可能 (と思っていますが、違っていればご指摘お願い致します)なので、 セマフォ等のロックをかけなくても、問題はないものなのでしょうか? 割りと良くありそうな疑問だと思ったのですが、 ウェブで調べた限りでは該当する質問はありませんでしたので、 質問させて頂きました。 ご回答宜しくお願い致します。