macFD.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:6k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: macFD.h,v 1.3.36.3 2004/07/09 01:44:30 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #define USE_MAC_FD 1
  50. #if _MACINTOSH
  51. #pragma once
  52. #endif
  53. #ifndef __MACFD__
  54. #define __MACFD__
  55. #ifdef __cplusplus
  56. extern "C" {
  57. #endif  /* __cplusplus */
  58. #define NBBY 8 /* number of bits in a byte */
  59. /*
  60.  * Select uses bit masks of file descriptors in longs.  These macros
  61.  * manipulate such bit fields (the filesystem macros use chars).
  62.  * FD_SETSIZE may be defined by the user, but the default here should
  63.  * be enough for most uses.
  64.  */
  65. #define FD_SETSIZE 1024
  66. #ifndef howmany
  67. #define howmany(x, y) (((x)+((y)-1))/(y))
  68. #endif
  69. #ifndef _MAC_MACHO
  70. typedef long fd_mask;
  71. #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */
  72. typedef struct fd_set {
  73. fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
  74. } fd_set;
  75. /* local typedefs (used by creat) */
  76. #ifndef mode_t
  77. typedef unsigned long mode_t;
  78. #endif
  79. #endif
  80. #define  FD_VALID(x) ((x >= 0) && (x < FD_SETSIZE)) ? 1 : 0
  81. #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
  82. #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
  83. #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
  84. #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
  85. #define  bzero(x,y) ::memset(x,0,y)
  86. /*
  87.  * Mode values accessible to open()
  88.  */
  89.  
  90. #ifdef __MWERKS__
  91. #if  __MWERKS__ <0x2020 
  92. #define O_RDWR 0x0 /* open the file in read/write mode */
  93. #define O_RDONLY 0x1 /* open the file in read only mode */
  94. #define O_WRONLY 0x2 /* open the file in write only mode */
  95. #endif //  __MWERKS__ <0x2020 
  96. #endif
  97. #define O_APPEND 0x0100 /* open the file in append mode */
  98. #define O_CREAT 0x0200 /* create the file if it doesn't exist */
  99. #define O_EXCL 0x0400 /* if the file already exists don't create it again */
  100. #define O_TRUNC 0x0800 /* truncate the file after opening it */
  101. #define O_NRESOLVE 0x1000 /* Don't resolve any aliases */
  102. #define O_ALIAS 0x2000 /* Open alias file (if the file is an alias) */
  103. #define O_RSRC  0x4000 /* Open the resource fork */
  104. #define O_BINARY 0x8000 /* open the file in binary mode (default is text mode) */
  105. // missing from <fcntl.h>
  106. // missing from <unistd.h>
  107. #define O_ACCMODE 0x0003 /* mask for above modes */
  108. #define SEEK_SET 0
  109. #define SEEK_CUR 1
  110. #define SEEK_END 2
  111. enum
  112. {
  113. FD_SOCKET = 1,
  114. FD_FILE
  115. };
  116. typedef struct FD
  117. {
  118. void  *owner; // pointer to owning object
  119. int available; // == 1, the FD is available
  120. int index; // the actual file descriptor index used to reference this FD
  121. int type; // the type of object this FD represents (FD_SOCKET or FD_FILE)
  122. int readReady; // flag to indicate FD is ready for reading
  123. int writeReady; // flag to indicate that FD is ready for writing
  124. int error; // flag to indicate that FD is in an error state
  125. } FD;
  126. void init_fds(void);
  127. int get_free_fd(void);
  128. int free_fd(int fd);
  129. void fd_register(int fd, void *owner, int type);
  130. FD *get_fd_object(int fd);
  131. int select(int width, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  132. int close(int fd);
  133. //int open(const char *path, int flags, mode_t mode);
  134. #if UNIVERSAL_INTERFACES_VERSION < 0x0341
  135. int read(int fd, void * buf, int len);
  136. int write(int fd, const void * buf, int len);
  137. int lseek(int fd, unsigned long off, int whence);
  138. int unlink(char *filename);
  139. #endif
  140. void *fd_get_owner(int fd);
  141. #ifdef __cplusplus
  142. }
  143. #endif  /* __cplusplus */
  144. #endif  /* __MACFD__ */