Bạn được cung cấp một đối tượng IO::File
hoặc typeglob (\*STDOUT
hoặc Symbol::symbol_to_ref("main::FH")
); làm thế nào bạn sẽ đi về xác định nếu nó là một xử lý đọc hoặc viết? Giao diện không thể mở rộng để chuyển thông tin này (tôi ghi đè close
để thêm các cuộc gọi đến flush
và sync
trước khi đóng thực tế).Làm thế nào để xác định liệu một xử lý tập tin Perl là một xử lý đọc hoặc viết?
Hiện nay tôi đang cố gắng để flush
và sync
filehandle và bỏ qua những lỗi "Invalid argument"
(đó là những gì tôi nhận được khi tôi cố gắng để flush
hoặc sync
một filehandle đọc):
eval { $fh->flush; 1 } or do {
#this seems to exclude flushes on read handles
unless ($! =~ /Invalid argument/) {
croak "could not flush $fh: $!";
}
};
eval { $fh->sync; 1 } or do {
#this seems to exclude syncs on read handles
unless ($! =~ /Invalid argument/) {
croak "could not sync $fh: $!";
}
};
+1 Fantastic câu hỏi! Tôi không biết khi nào tôi sẽ sử dụng nó, nhưng tôi thích thú khi biết ai đó cần điều này. – scraimer
Ext4 đã đưa ra các vấn đề mà Ext3 đã giữ ẩn trong một thời gian. Xem http://thunk.org/tytso/blog/2009/03/15/dont-fear-the-fsync/ và chuỗi p5p đang diễn ra (http://www.xray.mpe.mpg.de/mailing-lists /perl5-porters/2009-03/msg00322.html) cho nền. –