Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Feb 2005 01:47:20 -0800
From:      John-Mark Gurney <gurney_j@resnet.uoregon.edu>
To:        Yan Yu <yanyu@CS.UCLA.EDU>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: confusion on fopen()/falloc()
Message-ID:  <20050226094720.GN89312@funkthat.com>
In-Reply-To: <Pine.GSO.4.58.0502260103420.13229@panther.cs.ucla.edu>
References:  <20050226072645.76950.qmail@web26802.mail.ukl.yahoo.com> <Pine.GSO.4.58.0502260043200.12442@panther.cs.ucla.edu> <Pine.GSO.4.58.0502260103420.13229@panther.cs.ucla.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
Yan Yu wrote this message on Sat, Feb 26, 2005 at 01:10 -0800:
> Hello, all,
> I have a user program as below:
> FILE *fd;
> while (1)
> {
> 	fd= fopen( "tmp", "r" );
> 	if ( fd == NULL )
> 		break;
> }
> 
> from my understanding, since i open the same file to read, my process
> should create a new file descriptor each time when fopen is called.
> Therefore, inside the kernel, fdalloc() should be called, NOT falloc()
> (since falloc() allocates a new FILE * struct in addition to a new file
> descriptor),
> BUT based on what i observed (i instrumented falloc() function), it seems
> that falloc() is called each time when fopen() is called.
> I am wondering where i missed?

first off, if you are looking at this code, you probably want to be
calling open instead of fopen...   fopen is stdio and is implemented in
src/lib/libc/stdio/fopen.c...  There it'll do an open system call, but
you don't have as direct control over it...   Also, the kernel is not
responsible for FILE * allocations, that is purely a userland
implementation detail..  it will end up getting mapped to a file
descriptor opened via open...

if you look in src/sys/kern/vfs_syscalls.c at open, it calls kern_open
(in the same file) which calls falloc...  falloc by it's comment does
more than just allocate a file descriptor, it also allocates a new file
structure, but then it does call fdalloc to get the file descriptor..

Again, make sure you don't confuse the userland FILE * with the kernel..

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050226094720.GN89312>