OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

あるファイルが他プロセスによってオープンされているかどうかを確認する方法

  • 暇なときにでも
  • 質問No.155545
  • 閲覧数478
  • ありがとう数1
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 57% (4/7)

2つのディレクトリの内容を比較し、その結果を標準出力に出力するプログラム(diffのラッパーです)を作成していますが、以下のように出力を比較対照のディレクトリ内のファイルにリダイレクトした場合、このファイルまで比較してしまいます。

$ mydiff . directory > diffresult

これを防ぐため、ファイルを比較する際に、ファイルが他プロセスによってオープンされているかどうか調べ、その旨をstderrに出力するようにしたいのですが、その方法がわからず困っていますのでよろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1
レベル9

ベストアンサー率 71% (59/82)

「あるファイルが他プロセスによってオープンされているかどうかを確認する方法」 は知りませんが、 「mydiffの開始よりも後で内容が変更されたかどうかを確認する方法」 で代用できませんか? mydiffを何で書かれているか分かりませんので、私の標準シェルである cshで書くと、 # スクリプトの先頭 touch /tmp/mydiff.tmp .... if( { ...続きを読む
「あるファイルが他プロセスによってオープンされているかどうかを確認する方法」

は知りませんが、

「mydiffの開始よりも後で内容が変更されたかどうかを確認する方法」

で代用できませんか?
mydiffを何で書かれているか分かりませんので、私の標準シェルである
cshで書くと、

# スクリプトの先頭
touch /tmp/mydiff.tmp

....

if( { newer /tmp/mydiff.tmp $f1 } == 0 ) then
echo $f1 is modified after mydiff was invoked.
exit
endif
if( { newer /tmp/mydiff.tmp $f2 } == 0 ) then
echo $f2 is modified after mydiff was invoked.
exit
endif

....

# この辺で$f1と$f2を比較

rm -f /tmp/mydiff.tmp
# スクリプトの末尾

上のスクリプトでは、対応するファイル名が$f1と$f2に
入っていて、diff $f1 $f2とかやって比較している、
と仮定しています。
  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

> ファイルが他プロセスによってオープンされているかどうか調べ、その旨をstderrに出力するようにしたい 使っている OS が分からないのですが、fuser というコマンドがありませんか? こいつの出力を加工することで、望みの結果を得られるはず。 ...続きを読む
> ファイルが他プロセスによってオープンされているかどうか調べ、その旨をstderrに出力するようにしたい

使っている OS が分からないのですが、fuser というコマンドがありませんか?
こいつの出力を加工することで、望みの結果を得られるはず。
お礼コメント
akym2

お礼率 57% (4/7)

ご回答ありがとうございます。

使用しているOSはHP-UXで、/usr/sbin/fuserというコマンドはありました。
ですが、このコマンドはrootのみにしか実行権限がないため、管理者ではない私には使用できないものでした。

一応rootのパスワードも知っているため、実験したところ、プロセスIDが得られましたので、これを加工すれば何とかなることが分かりました。
ただし、本マシンは複数の開発者で共有しているものなので、あまり気楽にrootになるわけにはいかないのです。
投稿日時 - 2001-10-23 17:03:34
  • 回答No.3
レベル14

ベストアンサー率 50% (1122/2211)

> ですが、このコマンドはrootのみにしか実行権限がない そうなの? > 本マシンは複数の開発者で共有しているものなので、あまり気楽にrootになるわけにはいかない 思い付く案を二つほど。 ・管理者にお願いして、fuser に実行権限をつけてもらう ・su コマンドを使って、fuser を実行する 結局 su コマンドを使う、ということは root 権限を得る ...続きを読む
> ですが、このコマンドはrootのみにしか実行権限がない

そうなの?

> 本マシンは複数の開発者で共有しているものなので、あまり気楽にrootになるわけにはいかない

思い付く案を二つほど。

・管理者にお願いして、fuser に実行権限をつけてもらう
・su コマンドを使って、fuser を実行する

結局 su コマンドを使う、ということは root 権限を得ることになるのだから、
「気楽に root になるわけにいかない」ということを解決しているわけには
ならんですが。

ちなみに、こんな感じ。

% su root -c "/usr/sbin/fuser 対象のファイル名"
  • 回答No.4
レベル3

ベストアンサー率 0% (0/3)

コマンドにパスが通っていなくても 実行権限がないとは限りません コマンドをフルパス指定で実行してみてはどうでしょうか
コマンドにパスが通っていなくても
実行権限がないとは限りません

コマンドをフルパス指定で実行してみてはどうでしょうか
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ