Se le da un objeto IO::File
o un typeglob (\*STDOUT
o Symbol::symbol_to_ref("main::FH")
); ¿cómo harías para determinar si es un mango de lectura o escritura? La interfaz no se puede extender para pasar esta información (estoy anulando close
para agregar llamadas a flush
y sync
antes del cierre real).¿Cómo puedo determinar si un manejador de archivo Perl es un manejador de lectura o escritura?
Actualmente estoy tratando de flush
y sync
el gestor de archivo e ignorando el error "Invalid argument"
(que es lo que tengo cuando intente flush
o sync
un gestor de archivo de lectura):
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 fantástico pregunta! No tengo idea de cuándo alguna vez usaría esto, pero estoy fascinado de saber que alguien lo necesita. – scraimer
Ext4 ha planteado problemas que Ext3 había mantenido ocultos por un tiempo. Ver http://thunk.org/tytso/blog/2009/03/15/dont-fear-the-fsync/ y el hilo p5p en curso (http://www.xray.mpe.mpg.de/mailing-lists /perl5-porters/2009-03/msg00322.html) para fondo. –