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










