Please Note: This question is not a duplicate of ( One element array in struct )
The following code is excerpted from the Linux kernel source (versi
These fields are an optimization so Linux doesn't have to perform as many allocations for a typical process that has no more than BITS_PER_LONG
open file descriptors.
The close_on_exec_init
field provides the initial storage for fdt->close_on_exec
when a files_struct
is allocated. (See dup_fd
in fs/file.c
.)
Each bit of fdt->close_on_exec
is set if the corresponding file descriptor has the “close-on-exec” flag set. Thus Linux only needs to allocate additional space for fdt->close_on_exec
if the process has more open file descriptors than the number of bits in an unsigned long
.
The open_fds_init
field serves the same function for the fdt->open_fds
field. The fd_array
field serves the same function for the fdt->fd
field. (Note that fd_array
has a size of BITS_PER_LONG
.)
The close_on_exec_init
and open_fds_init
fields formerly had type struct embedded_fd_set
, but were changed to bare arrays in this commit. The commit message doesn't explain why the author chose to use one-element arrays instead of bare scalars. Perhaps the author (David Howells) simply wanted to avoid using the &
operator.