Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^2: Bad file descriptor when trying to close file handle

by ikegami (Patriarch)
on Mar 03, 2022 at 14:42 UTC ( [id://11141801]=note: print w/replies, xml ) Need Help??


in reply to Re: Bad file descriptor when trying to close file handle
in thread Bad file descriptor when trying to close file handle

No, changes to the directory entry that was used to open the file (incl renaming and deleting) would not result in that error.

Unix: Doing these things has no effect on the file, to which one can continue writing. It would not produce an error at all.

Windows: File handles opened by Perl don't even allow those operations to occur. (This is standard.)

  • Comment on Re^2: Bad file descriptor when trying to close file handle

Replies are listed 'Best First'.
Re^3: Bad file descriptor when trying to close file handle
by LanX (Saint) on Mar 03, 2022 at 14:57 UTC
    I tested it out, you are right, the only way to reproduce this was closing the same FH twice. (at least I think, Ubuntu is giving me German error messages)°

    > to which one can continue writing.

    well kind of, printing to an unlinked file in ">>" mode seems to do nothing, but no error message either.

    (Tho I only did a quick test in the debugger...)

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

    °) it's unfortunate we can't add these kind of errors to perldiag

      well kind of, printing to an unlinked file in ">>" mode seems to do nothing, but no error message either.

      It might seem to you that it does nothing, but that's not the case. It does what I said it does: It writes to the file as it always does.

      Open the file twice, once for reading and once for writing. Then delete the directory entry you used to open the file, then write to it, then read from it. You'll see it's there.

        A bit more on this.

        Files exists independently of directory entries in unix. Think of them as being referenced-counted. They exist as long as they are referenced by a directory entry or by a file handle.

        This means you can have "anonymous files". perl -i uses this (which is why it doesn't work on Windows without an extension). File::Temp creates these by default.

        ls -l even shows how many times a file is referenced by a directory entry (second column). For plain files, it's usually one. For directories, it should be more than one.

        $ ls -ld . .. .bash* bin usr drwxr-xr-x 10 ikegami ikegami 4096 Feb 19 23:53 ./ drwxr-xr-x 3 root root 4096 Dec 10 21:14 ../ -rw------- 1 ikegami ikegami 163 Jan 3 02:07 .bash_logout -rw------- 1 ikegami ikegami 2318 Jan 3 02:07 .bashrc -rw------- 1 ikegami ikegami 0 Jan 3 02:07 .bashrc_extra drwx------ 2 ikegami ikegami 4096 Feb 14 12:13 bin/ drwx------ 3 ikegami ikegami 4096 Jan 24 15:39 usr/

        See how .. is referenced by three directory entries? Those are /home, /home/. and /home/ikegami/..

        See how . is referenced by ten directory entries? Those are /home/ikegami, /home/ikegami/., /home/ikegami/bin/.., /home/ikegami/usr/.., etc.

        not sure what you mean, I globed the directory after writing to an unlinked file and it was gone.

        Probably that file and inode still exist without association to a dir, but how would I recreate it into the dir?

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11141801]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (3)
As of 2024-04-25 21:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found