Example for aio_cancel Function
The following example illustrates how
aio_
cancel()
function can be used.
int aio_ex_4(HANDLE fd)
{
static struct aiocb aio;
static struct aiocb *aio_list[] = {&aio};
int ret;
char *dat = "Hello from Ex-4\n";
printf("AIO_CANCELED=%d AIO_NOTCANCELED=%d\n",
AIO_CANCELED, AIO_NOTCANCELED);
/* Data initialization and asynchronously writing */
IC_AIO_DATA_INIT(aio, fd, dat, strlen(dat), 0);
if (aio_write(&aio) == -1) return errno;
ret = aio_cancel(fd, &aio);
if ( ret == AIO_NOTCANCELED ) {
fprintf(stderr, "ERRNO=%d STR=%s\n", ret, strerror(ret));
ret = aio_suspend(aio_list, 1, NULL);
if (ret == -1) return errno;}
ret = aio_cancel(fd, &aio);
if ( ret == AIO_CANCELED )
fprintf(stderr, "ERRNO=%d STR=%s\n", ret, strerror(ret));
else if (ret) return ret;
return 0;
}/* aio_ex_4 */
Result upon execution:
-bash-3.00$ ./a.out
AIO_CANCELED=0 AIO_NOTCANCELED=1
ERRNO=1 STR=Operation not permitted
-bash-3.00$ cat dat
Hello from Ex-4
-bash-3.00$
Remarks:
- In the example, theIC_AIO_DATA_INITis defined as follows:#define IC_AIO_DATA_INIT(_aio, _fd, _dat, _len, _off)\ {memset(&_aio, 0, sizeof(_aio)); \ _aio.aio_fildes = _fd; \ _aio.aio_buf = _dat; \ _aio.aio_nbytes = _len; \ _aio.aio_offset = _off;}
- The file descriptorfdis obtained as:HANDLE fd = CreateFile("dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/, NULL);