If I run the following program, I get the following results:
---
jello:/usr/home/chris/foo$ cat blah.c
#include <stdio.h>
int main() {
FILE *f = fopen("foo", "a+");
char x[50] = " ";
char y[50] = " ";
fseek(f, 0, SEEK_SET);
printf("tell: %d\n", ftell(f));
printf("fread return'd: %d\n", fread(x, (size_t) 1, (size_t)3, f));
printf("read: %s\n", x);
printf("tell: %d\n", ftell(f));
fwrite("xxx", (size_t) 1, (size_t) 3, f);
printf("tell: %d\n", ftell(f));
printf("fread return'd: %d\n", fread(y, (size_t) 1, (size_t)3, f));
printf("read: %s\n", y);
printf("tell: %d\n", ftell(f));
}
jello:/usr/home/chris/foo$ cat foo
123456789
jello:/usr/home/chris/foo$ cc blah.c -o bar;./bar
tell: 0
fread return'd: 3
read: 123
tell: 3
tell: 13
fread return'd: 0
read:
tell: 13
jello:/usr/home/chris/foo$
---
But, if I comment out the read before the write, I get somewhat strange
behavior:
---
jello:/usr/home/chris/foo$ cat blah.c
#include <stdio.h>
int main() {
FILE *f = fopen("foo", "a+");
char x[50] = " ";
char y[50] = " ";
fseek(f, 0, SEEK_SET);
printf("tell: %d\n", ftell(f));
// printf("fread return'd: %d\n", fread(x, (size_t) 1, (size_t)3, f));
// printf("read: %s\n", x);
printf("tell: %d\n", ftell(f));
fwrite("xxx", (size_t) 1, (size_t) 3, f);
printf("tell: %d\n", ftell(f));
printf("fread return'd: %d\n", fread(y, (size_t) 1, (size_t)3, f));
printf("read: %s\n", y);
printf("tell: %d\n", ftell(f));
}
jello:/usr/home/chris/foo$ cat foo
123456789
jello:/usr/home/chris/foo$ cc blah.c -o bar;./bar
tell: 0
tell: 0
tell: 3
fread return'd: 0
read:
tell: 13
jello:/usr/home/chris/foo$
---
It tells me I'm at 3, but my read acts as if I'm at the end of the file, and
then after trying to read it tells me I'm at 13 (the end).
Is this a bug? Am I doing something illegal, and the behavior is random? Or..?
According to Rozzin (CCed, who brought the issue to my attention), under Linux
he sees the first behavior (move pointer to end of file, and tell you that)
consistantly.
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message