macFD.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

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