Asynchronous File I/O on Linux

Mark Woodward markw-FJ05HQ0HCKaWd6l5hS35sQ at public.gmane.org
Sun May 16 14:30:25 EDT 2010


>
> Date: Sat, 15 May 2010 19:27:47 -0400
> From: Richard Pieri <richard.pieri-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org>
> Subject: Re: Asynchronous File I/O on Linux
> To: Boston Linux and Unix <discuss-mNDKBlG2WHs at public.gmane.org>
> Message-ID: <3B680037-E036-4210-8694-B08DEB7BD1F4-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org>
> Content-Type: text/plain; charset=us-ascii
>
> On May 15, 2010, at 5:56 PM, Mark Woodward wrote:
>   
>> OK, so, the methodology is quite similar, fine. Now the question 
>> remains, is it possible to quickly "clone" an existing file handle so 
>> that it will be a new and distinct file handle with the same permissions 
>> and modes with its own distict view of current location, i.e. seek on 
>> one does not affect seek on the other?
>>     
>
> Part of the difficulty finding an answer is, I think, your incorrect use of "asynchronous I/O".  This isn't it.  What you've described is random access.
>   
While I can see your point, it would be impossible to do multiple 
simultaneous requests without some sort of asynchronous I/O capability.  
The "random access" aspect of it comes out of using multiple file 
handles to a single file.
> A file handle is really a pointer to a structure in the kernel somewhere that contains, among other things, the file read/write pointer.  If you clone the descriptor then you get a pointer to the same structure.  What you want is a completely new file handle for the same file.  That's easy: open().  So you'd do something like:
>
> fh1 = open(filename, O_WRONLY, mode);
> fh2 = open(filename, O_WRONLY, mode);
> readblock(block,size,offset,fd1);
> readblock(block,size,offset,fd2);
> close(fd1);
> close(fd2);
>   
No offense Richard, and I know it is a habit I tend to share, 
unfortunately, but offering remedial instruction in response to question 
is almost never productive: the ignorant won't listen and the 
knowledgeable don't need it. Besides, you probably mean O_RDWR or 
O_RDONLY, O_WRONLY won't work in your example.

 
> I think.
>
> --Rich P.
>
>   






More information about the Discuss mailing list