6

ファイルの名前を指定して、ファイルが現在開いているか使用中であるかを確認するにはどうすればよいですか?(私はPerlファイルハンドルではなくファイルについて話している。)

オペレーティングシステム固有のソリューションではなく、汎用のPerlソリューションを探していることに注意してください。少なくとも、WindowsとGNU/Linuxベースのシステムの両方で機能するものが欲しいです。

4

8 に答える 8

5

POSIX は、これを行う方法を提供していません。したがって、現在利用可能なポータブル O/S インターフェイスを考えると、ポータブル ソリューションは不可能です。

オープニングビットへの単一のアクセスポイントを提供する、より高いレベルのアプローチを作成する必要があります。ロックファイルのようなものです。

于 2012-06-18T11:44:46.757 に答える
0

次のスニペットを参照してください (Linux/Unix のみ。実行している OS は指定しません)。

ワンライナーで:

perl -e 'my $file = $ARGV[0]; print "file $file is opened" if `lsof $file`;' FILE

スクリプト内:

#!/usr/bin/env perl -w

use strict;

my $file = $ARGV[0];
print "file $file is opened\n" if `lsof $file`;

実行するには:

./script.pl FILENAME
于 2012-05-30T11:11:10.790 に答える
-1

Try this

use strict;
open(IN, ">test");
print IN "Hello";
close(IN);
if(fileno(IN) == undef )
{
    print "File is CLOSED\n";
}
于 2012-06-01T11:41:59.473 に答える
-1

Scalar::Util を試す

Scalar::Utilモジュールは、このための関数を提供しますopenhandle()fileno()とは異なり、OS ファイルハンドルに関連付けられていない perl ファイルハンドルを処理します。tell()とは異なり、開かれていないファイルハンドルで使用しても警告は生成されません モジュールのドキュメントから:

オープンハンドル FH

Returns FH if FH may be used as a filehandle and is open, or FH is a tied handle. Otherwise "undef" is returned.

   $fh = openhandle(*STDIN);           # \*STDIN
   $fh = openhandle(\*STDIN);          # \*STDIN
   $fh = openhandle(*NOTOPEN);         # undef
   $fh = openhandle("scalar");         # undef
于 2012-05-30T19:00:14.740 に答える
-2

ファイルハンドルを開きたくないことはわかっていますが、IMOの最も簡単な方法はおそらく次のとおりです。

open my $myfh, '<', $my_file or die "Couldn't open $my_file: $!";
于 2012-06-01T12:08:14.617 に答える