По умолчанию ядро позволяет каждому процессу открывать файлы NR_OPEN_DEFAULT. Это значение определено
в include / linux / sched.h с настройкой по умолчанию BITS_PER_LONG. Поэтому в 32-разрядных системах начальное количество файлов составляет 32; 64-разрядные системы могут одновременно обрабатывать 64 файла.
в файле .h
struct files_struct {
42 /*
43 * read mostly part
44 */
45 atomic_t count;
46 struct fdtable *fdt;
47 struct fdtable fdtab;
48 /*
49 * written part on a separate cache line in SMP
50 */
51 spinlock_t file_lock ____cacheline_aligned_in_smp;
52 int next_fd;
53 struct embedded_fd_set close_on_exec_init;
54 struct embedded_fd_set open_fds_init;
55 struct file * fd_array[NR_OPEN_DEFAULT];
56};
В ядре каждый открытый файл представлен дескриптором файла, который действует как индекс позиции для
специфичный для процесса массив (task_struct-> files-> fd_array). Этот массив содержит экземпляр вышеупомянутой файловой структуры со всей необходимой файловой информацией для каждого открытого файла.
Зацикливаясь на fd_array, вы можете получить информацию обо всех открытых файлах процессом.