Open System Services Programmer's Guide
my_printf("*** ERROR in OSS_write_thread: unable to
allocate I/O buffer \ ***\n");
exit(0);
}
memset(iobuf, 0, IOSIZE);
/*********************/
/* open the OSS file */
/*********************/
if ((fd = open(OSS_write_file, O_WRONLY | O_NONBLOCK | O_CREAT |
O_TRUNC, S_IRWXU)) < 0)
{
my_printf("*** ERROR in OSS_write_thread: open() of %s failed
w/error \ %d ***\n", OSS_write_file, errno);
exit(0);
}
/***********************************************/
/* write the OSS file in a thread-aware manner */
/***********************************************/
while (currsize < WRITE_FILESIZE)
{
nbytes = write(fd, iobuf, IOSIZE);
if (nbytes < 0)
{
if ((errno == EWOULDBLOCK) || (errno == EAGAIN))
{
/***********************************************************/
/* NOTE that this code does not execute for regular (disk) */
/* files, because write() on a regular file never returns */
/* EWOULDBLOCK or EAGAIN */
/***********************************************************/
ret = put_fd_write_ready(fd, NULL);
if (ret != 0)
{
my_printf("*** ERROR in OSS_write_thread:
put_fd_write_ready() \ failed w/error %d ***\n",
ret);
exit(0);
}
}
else
{
my_printf("*** ERROR in OSS_write_thread: write() failed
w/error %d \
***\n", errno);
exit(0);
}
}
else /* write successful */
{
currsize += nbytes;
}
} /* while */
close(fd);
my_printf("==> OSS_write_thread() wrote %d bytes to file %s\n",
WRITE_FILESIZE, OSS_write_file);
return(NULL);
}
404 Using the POSIX User Thread (PUT) Model Library