no files can be opened in a C program

Abhijit Pawar apawar.linux at gmail.com
Tue Jul 26 01:05:06 EDT 2011


Hi Manish,
On 07/26/2011 10:22 AM, Manish Katiyar wrote:
> On Mon, Jul 25, 2011 at 9:41 PM, Manish Katiyar<mkatiyar at gmail.com>  wrote:
>> On Mon, Jul 25, 2011 at 9:29 PM, Abhijit Pawar<apawar.linux at gmail.com>  wrote:
>>> Hi Dave,
>>> On 07/25/2011 09:20 PM, Dave Hylands wrote:
>>>> Hi Abhijit,
>>>>
>>>> On Mon, Jul 25, 2011 at 6:35 AM, Abhijit Pawar<apawar.linux at gmail.com>    wrote:
>>>>> On 07/25/2011 05:29 PM, Naveen Kumar wrote:
>>>>>
>>>>> You can use command ulimit -a, there you can check the limit for a process.
>>>>>
>>>>> Thanks,
>>>>> Naveen
>>>>>
>>>>> Ulimit gives 1024 as open file limit. In struct task_struct it has a member
>>>>> called struct files_struct *files;
>>>>>
>>>>> I tried checking for this member and the limit however I am  not able to
>>>>> decide correctly why the limit is 1024.
>>>>>    Also, is there any distinction between 32 bit and 64 bit systems for this
>>>>> limit?
>>>> My 64-bit system reports 1024 as well.
>>>>
>>>> I have no troubles compiling kernels.
>>>>
>>> Thanks. Yes, on my 64 bit Fedora 15 I get same value as yours.
>>>
>>> What I am interested in is knowing why the limit is on 1024 File
>>> Descriptors? That means 1024 Inodes. AFAIK there isnt anything written
>>> in filesystem code which will put this limit of 1024 inodes for a process.
>>> This means its very specific to the process.
>>> Unfortunately I am know having details on the process front. Is there
>>> anything which you or anyone aware in process area because of which this
>>> limit is there?
>> man getdtablesize
> and if you trace the kernel code, it comes from the limits of the init
> task, which is hard coded during creation. You can get/set these
> values using getrlimit/setrlimit.
>
>
> include/linux/init_task.h
> 33 #define INIT_SIGNALS(sig) {                                             \
> .................
> .................
>   41         .rlim           = INIT_RLIMITS,
> ..............
>
> include/asm-generic/resource.h
>   72 #define INIT_RLIMITS                                                    \
>   73 {                                                                       \
>   74         [RLIMIT_CPU]            = {  RLIM_INFINITY,  RLIM_INFINITY },   \
>   75         [RLIMIT_FSIZE]          = {  RLIM_INFINITY,  RLIM_INFINITY },   \
>   76         [RLIMIT_DATA]           = {  RLIM_INFINITY,  RLIM_INFINITY },   \
>   77         [RLIMIT_STACK]          = {       _STK_LIM,   _STK_LIM_MAX },   \
>   78         [RLIMIT_CORE]           = {              0,  RLIM_INFINITY },   \
>   79         [RLIMIT_RSS]            = {  RLIM_INFINITY,  RLIM_INFINITY },   \
>   80         [RLIMIT_NPROC]          = {              0,              0 },   \
>   81         [RLIMIT_NOFILE]         = {   INR_OPEN_CUR,   INR_OPEN_MAX },   \
> ...............
> ..............
>
> include/linux/fs.h
> 25 #undef NR_OPEN
>   26 #define INR_OPEN_CUR 1024       /* Initial setting for nfile rlimits */
>   27 #define INR_OPEN_MAX 4096       /* Hard limit for nfile rlimits */
>
>
> HTH
This is really helpful. Thanks.

Regards,
Abhijit Pawar



More information about the Kernelnewbies mailing list