On Thu, May 04, 2006 at 08:30:53PM +0200, Michael Kerrisk wrote: > Justin, > > > > To your patch: > > > > > > > fopen, fdopen, freopen \- stream open functions > > > > > > Did you check whether you text is true of all three of these > > > functions? > > Yup, I just checked. > > > > > > +.TP > > > > +.B m > > > > +Attempts to access the file using \fBmmap()\fP rather than > > > > +\fBread()\fP and \fBwrite()\fP. > > > > > > How did you deduce "write()"? My reading is that mmap() is only used > > > if the file is opened for reading. > > This seems to be true, as indicated in the comments. I hadn't > > followed the code well enough to be sure, though, and it is slightly > > strange that it defers the mmap decision until the first read.. > > > > I just wrote a test case for "r+m", which seems to indicate that you > > are correct; an "r+m" file is read() not mmaped. > > Have you written a test program that verifies (presumably via > monitoring via 'strace') how 'm' changes the behaviour of stdio > with respect to the use of mmap()? Erm, yes, thats what I'm talking about (and is strace exactly what I did). But I'm not sure if I understand you .. I verified that all 3 routines mmap() a file if "m" is given (and it is read-only), and do not mmap() it if "m" is not given (or if it is not read-only).
I include now the test program :) Justin #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <error.h> int main() { #define PATHNAME "/tmp/fp.c" char buf[1<<10]; int fd; FILE *fp; // if (-1==(fd=open(PATHNAME, O_RDONLY))) { // error(EXIT_FAILURE, errno, "open"); // } if (NULL==(fp=fopen(PATHNAME, "r+m"))) { error(EXIT_FAILURE, errno, "fdopen"); } fread(buf, 1, sizeof(buf), fp); exit(EXIT_SUCCESS); } -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]