On Tue, Sep 16, 2014 at 12:20 AM, Patrick Welche <pr...@cam.ac.uk> wrote:
> Given a filedescriptor, how can you tell that it is valid and has been
> opened?
>
> In the attached simple program, a file and a directory are opened
> (with CLOEXEC set). I then call fcntl(fd, F_GETFD) on the range
> fd = [3..15].  fd = {3,4} correspond to the open file and directory.
> Why don't I get fcntl(4):
>
>      [EBADF]            fildes is not a valid open file descriptor.
>
> for fd = [5..15], but only for some of them?
>
> $ ./cloexec
> fd  3 testfile.txt flags = 0x1 (0x1)
> fd  4 testdir flags = 0x1 (0x1)
> fd  3's flags = 0x1 (0x1)
> fd  4's flags = 0x1 (0x1)
> fd  5's flags = 0x0 (0x0)
> fd  6's flags = 0x0 (0x0)
> fd  7's flags = 0x0 (0x0)
> fd  8's flags = 0x0 (0x0)
> fd  9's flags = 0x0 (0x0)
> fd 10's flags = 0x0 (0x0)
> cloexec: fcntl 11: Bad file descriptor
> cloexec: fcntl 12: Bad file descriptor
> fd 13's flags = 0x0 (0x0)
> fd 14's flags = 0x0 (0x0)
> cloexec: fcntl 15: Bad file descriptor

I get

fd  3 testfile.txt flags = 0x1 (0x1)
fd  4 testdir flags = 0x1 (0x1)
fd  3's flags = 0x1 (0x1)
fd  4's flags = 0x1 (0x1)
cloexec: fcntl 5: Bad file descriptor
cloexec: fcntl 6: Bad file descriptor
cloexec: fcntl 7: Bad file descriptor
cloexec: fcntl 8: Bad file descriptor
cloexec: fcntl 9: Bad file descriptor
cloexec: fcntl 10: Bad file descriptor
cloexec: fcntl 11: Bad file descriptor
cloexec: fcntl 12: Bad file descriptor
cloexec: fcntl 13: Bad file descriptor
cloexec: fcntl 14: Bad file descriptor
cloexec: fcntl 15: Bad file descriptor

Which looks fine, on netbsd6.1.4 and 7-pre, both on amd64.

What NetBSD version are you testing on?

Justin

Reply via email to