linux内核中的文件描述符(四)--fd的分配--get_unused_fd
linux内核中的文件描述符(四)--fd的分配--get_unused_fd
Kernel version:2.6.14
CPU architecture:ARM920T
Author:ce123(http://blog.csdn.net/ce123)
在linux内核中主要有两个函数涉及到文件描述符的分配:get_unused_fd和locate_fd。本文主要讲解get_unused_fd,将会在下一篇文章中介绍locate_fd。首先给出get_unused_fd的定义(fs/open.c):
#define INIT_SIGNALS(sig) {\.count= ATOMIC_INIT(1), \.wait_chldexit= __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\.shared_pending= { \.list = LIST_HEAD_INIT(sig.shared_pending.list),\.signal = {{0}}}, \.posix_timers = LIST_HEAD_INIT(sig.posix_timers),\.cpu_timers= INIT_CPU_TIMERS(sig.cpu_timers),\.rlim= INIT_RLIMITS,\}include\asm-generic\resource.h#define INIT_RLIMITS\{\[RLIMIT_CPU]= { RLIM_INFINITY, RLIM_INFINITY },\[RLIMIT_FSIZE]= { RLIM_INFINITY, RLIM_INFINITY },\[RLIMIT_DATA]= { RLIM_INFINITY, RLIM_INFINITY },\[RLIMIT_STACK]= { _STK_LIM, _STK_LIM_MAX },\[RLIMIT_CORE]= { 0, RLIM_INFINITY },\[RLIMIT_RSS]= { RLIM_INFINITY, RLIM_INFINITY },\[RLIMIT_NPROC]= { 0, 0 },\[RLIMIT_NOFILE]= { INR_OPEN, INR_OPEN },\[RLIMIT_MEMLOCK]= { MLOCK_LIMIT, MLOCK_LIMIT },\[RLIMIT_AS]= { RLIM_INFINITY, RLIM_INFINITY },\[RLIMIT_LOCKS]= { RLIM_INFINITY, RLIM_INFINITY },\[RLIMIT_SIGPENDING]= { 0, 0 },\[RLIMIT_MSGQUEUE]= { MQ_BYTES_MAX, MQ_BYTES_MAX },\[RLIMIT_NICE]= { 0, 0 },\[RLIMIT_RTPRIO]= { 0, 0 },\}#define NR_OPEN (1024*1024)/* Absolute upper limit on fd num */#define INR_OPEN 1024/* Initial setting for nfile rlimits */从上面的代码我们可以看到rlim_cur = 1024,也就是说进程最多可以打开1024个文件。