aio.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:7k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Copyright (C) 1996-2000,2003,2004 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.    The GNU C Library is free software; you can redistribute it and/or
  4.    modify it under the terms of the GNU Lesser General Public
  5.    License as published by the Free Software Foundation; either
  6.    version 2.1 of the License, or (at your option) any later version.
  7.    The GNU C Library is distributed in the hope that it will be useful,
  8.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  10.    Lesser General Public License for more details.
  11.    You should have received a copy of the GNU Lesser General Public
  12.    License along with the GNU C Library; if not, write to the Free
  13.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  14.    02111-1307 USA.  */
  15. /*
  16.  * ISO/IEC 9945-1:1996 6.7: Asynchronous Input and Output
  17.  */
  18. #ifndef _AIO_H
  19. #define _AIO_H 1
  20. #include <features.h>
  21. #include <fcntl.h>
  22. #include <signal.h>
  23. #include <time.h>
  24. #include <sys/types.h>
  25. __BEGIN_DECLS
  26. /* Asynchronous I/O control block.  */
  27. struct aiocb
  28. {
  29.   int aio_fildes; /* File desriptor.  */
  30.   int aio_lio_opcode; /* Operation to be performed.  */
  31.   int aio_reqprio; /* Request priority offset.  */
  32.   volatile void *aio_buf; /* Location of buffer.  */
  33.   size_t aio_nbytes; /* Length of transfer.  */
  34.   struct sigevent aio_sigevent; /* Signal number and value.  */
  35.   /* Internal members.  */
  36.   struct aiocb *__next_prio;
  37.   int __abs_prio;
  38.   int __policy;
  39.   int __error_code;
  40.   __ssize_t __return_value;
  41. #ifndef __USE_FILE_OFFSET64
  42.   __off_t aio_offset; /* File offset.  */
  43.   char __pad[sizeof (__off64_t) - sizeof (__off_t)];
  44. #else
  45.   __off64_t aio_offset; /* File offset.  */
  46. #endif
  47.   char __unused[32];
  48. };
  49. /* The same for the 64bit offsets.  Please note that the members aio_fildes
  50.    to __return_value have to be the same in aiocb and aiocb64.  */
  51. #ifdef __USE_LARGEFILE64
  52. struct aiocb64
  53. {
  54.   int aio_fildes; /* File desriptor.  */
  55.   int aio_lio_opcode; /* Operation to be performed.  */
  56.   int aio_reqprio; /* Request priority offset.  */
  57.   volatile void *aio_buf; /* Location of buffer.  */
  58.   size_t aio_nbytes; /* Length of transfer.  */
  59.   struct sigevent aio_sigevent; /* Signal number and value.  */
  60.   /* Internal members.  */
  61.   struct aiocb *__next_prio;
  62.   int __abs_prio;
  63.   int __policy;
  64.   int __error_code;
  65.   __ssize_t __return_value;
  66.   __off64_t aio_offset; /* File offset.  */
  67.   char __unused[32];
  68. };
  69. #endif
  70. #ifdef __USE_GNU
  71. /* To customize the implementation one can use the following struct.
  72.    This implementation follows the one in Irix.  */
  73. struct aioinit
  74.   {
  75.     int aio_threads; /* Maximal number of threads.  */
  76.     int aio_num; /* Number of expected simultanious requests. */
  77.     int aio_locks; /* Not used.  */
  78.     int aio_usedba; /* Not used.  */
  79.     int aio_debug; /* Not used.  */
  80.     int aio_numusers; /* Not used.  */
  81.     int aio_idle_time; /* Number of seconds before idle thread
  82.    terminates.  */
  83.     int aio_reserved;
  84.   };
  85. #endif
  86. /* Return values of cancelation function.  */
  87. enum
  88. {
  89.   AIO_CANCELED,
  90. #define AIO_CANCELED AIO_CANCELED
  91.   AIO_NOTCANCELED,
  92. #define AIO_NOTCANCELED AIO_NOTCANCELED
  93.   AIO_ALLDONE
  94. #define AIO_ALLDONE AIO_ALLDONE
  95. };
  96. /* Operation codes for `aio_lio_opcode'.  */
  97. enum
  98. {
  99.   LIO_READ,
  100. #define LIO_READ LIO_READ
  101.   LIO_WRITE,
  102. #define LIO_WRITE LIO_WRITE
  103.   LIO_NOP
  104. #define LIO_NOP LIO_NOP
  105. };
  106. /* Synchronization options for `lio_listio' function.  */
  107. enum
  108. {
  109.   LIO_WAIT,
  110. #define LIO_WAIT LIO_WAIT
  111.   LIO_NOWAIT
  112. #define LIO_NOWAIT LIO_NOWAIT
  113. };
  114. /* Allow user to specify optimization.  */
  115. #ifdef __USE_GNU
  116. extern void aio_init (__const struct aioinit *__init) __THROW;
  117. #endif
  118. #ifndef __USE_FILE_OFFSET64
  119. /* Enqueue read request for given number of bytes and the given priority.  */
  120. extern int aio_read (struct aiocb *__aiocbp) __THROW;
  121. /* Enqueue write request for given number of bytes and the given priority.  */
  122. extern int aio_write (struct aiocb *__aiocbp) __THROW;
  123. /* Initiate list of I/O requests.  */
  124. extern int lio_listio (int __mode,
  125.        struct aiocb *__const __list[__restrict_arr],
  126.        int __nent, struct sigevent *__restrict __sig) __THROW;
  127. /* Retrieve error status associated with AIOCBP.  */
  128. extern int aio_error (__const struct aiocb *__aiocbp) __THROW;
  129. /* Return status associated with AIOCBP.  */
  130. extern __ssize_t aio_return (struct aiocb *__aiocbp) __THROW;
  131. /* Try to cancel asynchronous I/O requests outstanding against file
  132.    descriptor FILDES.  */
  133. extern int aio_cancel (int __fildes, struct aiocb *__aiocbp) __THROW;
  134. /* Suspend calling thread until at least one of the asynchronous I/O
  135.    operations referenced by LIST has completed.
  136.    This function is a cancellation point and therefore not marked with
  137.    __THROW.  */
  138. extern int aio_suspend (__const struct aiocb *__const __list[], int __nent,
  139. __const struct timespec *__restrict __timeout);
  140. /* Force all operations associated with file desriptor described by
  141.    `aio_fildes' member of AIOCBP.  */
  142. extern int aio_fsync (int __operation, struct aiocb *__aiocbp) __THROW;
  143. #else
  144. # ifdef __REDIRECT_NTH
  145. extern int __REDIRECT_NTH (aio_read, (struct aiocb *__aiocbp), aio_read64);
  146. extern int __REDIRECT_NTH (aio_write, (struct aiocb *__aiocbp), aio_write64);
  147. extern int __REDIRECT_NTH (lio_listio,
  148.    (int __mode,
  149.     struct aiocb *__const __list[__restrict_arr],
  150.     int __nent, struct sigevent *__restrict __sig),
  151.    lio_listio64);
  152. extern int __REDIRECT_NTH (aio_error, (__const struct aiocb *__aiocbp),
  153.    aio_error64);
  154. extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
  155.  aio_return64);
  156. extern int __REDIRECT_NTH (aio_cancel,
  157.    (int __fildes, struct aiocb *__aiocbp),
  158.    aio_cancel64);
  159. extern int __REDIRECT_NTH (aio_suspend,
  160.    (__const struct aiocb *__const __list[], int __nent,
  161.     __const struct timespec *__restrict __timeout),
  162.    aio_suspend64);
  163. extern int __REDIRECT_NTH (aio_fsync,
  164.    (int __operation, struct aiocb *__aiocbp),
  165.    aio_fsync64);
  166. # else
  167. #  define aio_read aio_read64
  168. #  define aio_write aio_write64
  169. #  define lio_listio lio_listio64
  170. #  define aio_error aio_error64
  171. #  define aio_return aio_return64
  172. #  define aio_cancel aio_cancel64
  173. #  define aio_suspend aio_suspend64
  174. #  define aio_fsync aio_fsync64
  175. # endif
  176. #endif
  177. #ifdef __USE_LARGEFILE64
  178. extern int aio_read64 (struct aiocb64 *__aiocbp) __THROW;
  179. extern int aio_write64 (struct aiocb64 *__aiocbp) __THROW;
  180. extern int lio_listio64 (int __mode,
  181.  struct aiocb64 *__const __list[__restrict_arr],
  182.  int __nent, struct sigevent *__restrict __sig)
  183.      __THROW;
  184. extern int aio_error64 (__const struct aiocb64 *__aiocbp) __THROW;
  185. extern __ssize_t aio_return64 (struct aiocb64 *__aiocbp) __THROW;
  186. extern int aio_cancel64 (int __fildes, struct aiocb64 *__aiocbp) __THROW;
  187. extern int aio_suspend64 (__const struct aiocb64 *__const __list[], int __nent,
  188.   __const struct timespec *__restrict __timeout)
  189.      __THROW;
  190. extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp) __THROW;
  191. #endif
  192. __END_DECLS
  193. #endif /* aio.h */