Re: procfs uglyness caused by "cat"

From: Paul Rolland
Date: Tue Mar 14 2006 - 10:31:16 EST


> > static int uptime_read_proc(char *page, char **start, off_t off,
> > int count, int *eof, void *data)
> > {
> > struct timespec uptime;
> > struct timespec idle;
> > int len;
> > cputime_t idletime;
> >
> > + if (off)
> > + return 0;
>
> Except that this is wrong - if you try to advance the offset
> a bit from
> the start of the file and read something, you'll get nothing. This is
> inconsistent with normal file behavior.

Right... What's weird is : what do we get if a process decides to read
this using a 1 byte buffer, asking for 1 char at a time ?
And what we'll be the result if you read 1 char every 1 second ?

#include <stdio.h>

int main(int argc, char * argv[])
{
FILE * f;
char lChar;

f = fopen("/proc/uptime", "r");
if (f == NULL) {
exit(0);
} /* endif */

while (!feof(f)) {
fread(&lChar, 1, 1, f);
fprintf(stdout, "%c", lChar); fflush(stdout);
sleep(1);
} /* endwhile */

close(f);

exit(0);
}

is funny enough...

2.2.x :
58 [15:30] rol@www-dev:/tmp> cat /proc/uptime ; ./test
13849305.25 13555633.92
13849312.38 13555635.64

2.4.31 :
bash-2.05# cat /proc/uptime ; ./test
100711.77 100366.30
100711.77 100366.30

Paul

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/