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>