Alfred Perlstein wrote:

> * [EMAIL PROTECTED] <[EMAIL PROTECTED]> [000512 21:54] wrote:
> > I know that this was discussed in the past but I can't find out what to
> > do ?
> >
> > In Linux if I have to resize a mmap 'ed object I can just use mremap....
> > but in FreeBSD if,  I want to resize it what do I do ?
> >
> > I have tried writing past where I know the end is and it kinda works ?
> > but why ?
> >
> > Is their a better solution besides just writing to the file and then
> > calling msync ?
> >
> > Is their new plans to make a mremap call for FreeBSD 4.x ?
> no.
> >
> > Or am I just  sh%t  out of luck ?
> Possibly, but if you describe what you are trying to accomplish
> there may be some advice available.  Your misuse of msync makes me
> think that a rethinking of what you are trying to accomplish may
> be a good idea.  Please explain what makes you need mremap which
> is not portable to any version of unix.  I'm assuming you want your
> app to work on Solaris and other commercial systems.
> --
> "I have the heart of a child; I keep it in a jar on my desk."
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-hackers" in the body of the message

Sorry !

Ok here is a snipit of what I am trying to do....

fstat(fd, &st);
if( (base = (caddr_t *) mmap(0, st.st_size, ( PROT_READ | PROT_WRITE ) ,
   MSG_ERR("cannot mmap file, exiting ! ");

/* say st.st_size = 200, and I want to add to the end of the file more data
base += 200; /* we are now at the end */

rec = (stuct rec_t *) base;
rec->len = 200;
/* we are writing to the buff, but we are past.... */
memmove(rec->data, data, 100);
msync(base, 0, (st.st_len + rec->len),  MS_ASYNC);

the struct rec_t is an example of a stuct that I want to append to the buf
and make another reccord.
If base was a regular pointer we would segfault.... cause we are past the
pointers buf....
but  it kinda works.. meaning it will write and add and sometimes and not
segfault... sometimes...

or I can do this:

rec = (stuct rec_t *) base;
rec->len = 200;
memmove(rec->data, data, 100);
write(fd, (char *) rec, rec->len);
msync(base, 0, (st.st_len + rec->len),  MS_ASYNC);

After I append to the file and then msync.  I should be able to read the
reccord that I just added from base.
base  should reflect the file.... right ?

I want to make things simple and only append to the buffer "base" and not
have to re-open the file and write to it then msync it back to mem. I know
that some of this under FreeBSD "automatic" meaning that the changes made to
the file  are seen by "base" even though I do not call msync..... but in
order to keep things clear, I will msync.

I hope that this wasn't too confusing... I am not good at explanations.... or

thank you


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to