fast writes interruptable on SunOS 4.1.1
Pond Scum
hue at island.COM
Thu Feb 7 20:03:19 AEST 1991
(It's sorta internals - it has to do with sleeping at PZERO or lower, right?)
Here is a program that shows that writes to a regular file are interruptable
and not restartable under SunOS 4.1.1. Under SunOS 4.0.3 on Sun 3 and 4c,
HP-UX 7.0 on a 9000/370, and AIX 3.1 on an RS/6000 (no particular reason for
choosing them, that's just what's near my cube) the writes are not interrupted
and always complete. Under SunOS 4.1.1 on a 4c, the writes are interrupted.
-----------
#include <sys/types.h>
#include <fcntl.h>
#include <sys/time.h>
#include <signal.h>
#include <stdio.h>
#include <errno.h>
static void alrm();
static char bigbuf[0x100000];
static struct sigvec v = {alrm, 0, 0};
static struct itimerval it = {{0, 500000}, {0, 500000}}; /* half sec */
static void
alrm()
{
fputs("Ow, my head!\n", stderr);
}
main(argc, argv)
int argc;
char **argv;
{
int i, fd, nw;
for (i = 0; i < 0x100000; i++)
bigbuf[i] = i & 0xff;
sigvec(SIGALRM, &v, 0);
setitimer(ITIMER_REAL, &it, 0);
if ((fd = open("bigfile", O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0)
{
perror("bigfile");
exit(1);
}
for (i = 0; i < 10; i++)
{
errno = 0;
nw = write(fd, bigbuf, sizeof(bigbuf));
if (nw < 0)
{
perror("bigfile");
}
else if (nw != sizeof(bigbuf))
{
if (errno)
{
fprintf(stderr, "interrupted write, %d of %d got written\n",
nw, sizeof(bigbuf));
}
else
{
fprintf(stderr, "short write, %d of %d got written\n",
nw, sizeof(bigbuf));
}
}
}
return(0);
}
--
"It reminds me of how in the computer industry they use the word "user", which
to them means "idiot"" -Dave Barry
Jonathan Hue, Senior Coding Pig Island Grapics Corp. Graphic Arts Division
4000 Civic Center Drive San Rafael, CA {uunet,sun}!island!hue hue at island.com
More information about the Comp.unix.internals
mailing list