wvFileUploadPathLib.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:5k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* wvFileUploadPathLib.c -  file destination for event data */
  2. /* Copyright 1997 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,28aug98,dgp  FCS man page edit
  7. 01e,08may98,dgp  clean up man pages for WV 2.0 beta release
  8. 01d,15apr98,cth  removed debug print statement, removed errno set
  9. 01c,27jan97,cth  added openFlags arg to create, added fileUpPathDefaultPerm
  10. 01b,18dec97,cth  changed this file's name to from wvFileUploadPath.c to
  11.                  wvFileUploadPathLib.c, added fileUploadPathLibInit,
  12.  updated include files
  13. 01a,21nov97,cth  written, taken from evtSockLib.c
  14. */
  15. /*
  16. DESCRIPTION
  17. This file contains routines that write events to a file rather than
  18. uploading them to the host using a type of socket connection.  If the file
  19. indicated is a TSFS file, this routine has the same result as uploading to a
  20. host file using other methods, allowing it to replace evtRecv.  The file can be
  21. created anywhere, however, and event data can be kept on the target if
  22. desired.
  23. INCLUDE FILES:
  24. SEE ALSO: wvSockUploadPathLib, wvTsfsUploadPathLib
  25. */
  26. #include "vxWorks.h"
  27. #include "errno.h"
  28. #include "ioLib.h"
  29. #include "fcntl.h"
  30. #include "stdlib.h"
  31. #include "logLib.h"
  32. #include "private/wvUploadPathP.h"
  33. #include "private/wvFileUploadPathLibP.h"
  34. typedef struct fileUploadPath   /* FILE_UPLOAD_DESC */
  35.     {
  36.     UPLOAD_DESC path; /* struct must begin with this descriptor */
  37.     int fileFd; /* private fd for each upload path */
  38.     } FILE_UPLOAD_DESC;
  39. /* globals */
  40. int fileUpPathDefaultPerm = 0644;
  41. /*******************************************************************************
  42. *
  43. * fileUploadPathLibInit - initialize the wvFileUploadPathLib library (Windview)
  44. *
  45. * This routine initializes the library by pulling in the routines in this 
  46. * file for use with WindView.  It is called during system configuration 
  47. * from usrWindview.c.
  48. *
  49. * RETURNS: OK.
  50. *
  51. */
  52. STATUS fileUploadPathLibInit (void)
  53.     {
  54.     return OK;
  55.     }
  56. /*******************************************************************************
  57. *
  58. * fileUploadPathCreate - create a file for depositing event data (Windview)
  59. *
  60. * This routine opens and initializes a file to receive uploaded events.  
  61. * The <openFlags> argument is passed on as the flags argument to the actual 
  62. * open call so that the caller can specify things like O_TRUNC and O_CREAT.
  63. * The file is always opened as O_WRONLY, regardless of the value of <openFlags>.
  64. * RETURNS: The UPLOAD_ID, or NULL if the file can not be opened or 
  65. * memory for the ID is not available.
  66. *
  67. * SEE ALSO: fileUploadPathClose()
  68. */
  69. UPLOAD_ID fileUploadPathCreate 
  70.     (
  71.     char *fname, /* name of file to create */
  72.     int   openFlags /* O_CREAT, O_TRUNC */
  73.     )
  74.     {
  75.     FILE_UPLOAD_DESC   *pFileUploadDesc; /* this socket's descriptor */
  76.     /* Allocate the upload path's descriptor. */
  77.     if ((pFileUploadDesc = (FILE_UPLOAD_DESC *)
  78.                            malloc (sizeof (FILE_UPLOAD_DESC))) == NULL)
  79.         {
  80.         logMsg ("fileUploadPathCreate: failed to allocate upload descriptor.n",
  81.                 0, 0, 0, 0, 0, 0);
  82.         return (NULL);
  83.         }
  84.     /* Open the file for writing only, maintaining O_CREAT, O_TRUNC. */
  85.     openFlags &= ~O_RDONLY;
  86.     openFlags &= ~O_RDWR;
  87.     openFlags |=  O_WRONLY;
  88.     if ((pFileUploadDesc->fileFd = open (fname, openFlags, 
  89.  fileUpPathDefaultPerm)) == ERROR)
  90.         {
  91.         logMsg ("fileUploadPathCreate: failed to open file (%s).n", 
  92. (int) fname, 0, 0, 0, 0, 0);
  93.         return (NULL);
  94.         }
  95.     /* Fill in the file's upload routines so the uploader can access them. */
  96.     pFileUploadDesc->path.writeRtn = (FUNCPTR) fileUploadPathWrite;
  97.     pFileUploadDesc->path.errorRtn = (FUNCPTR) fileUploadPathClose;
  98.     /* Cast the FILE_UPLOAD_DESC to a generic UPLOAD_DESC before returning. */
  99.     return ((UPLOAD_ID) pFileUploadDesc);
  100.     }
  101. /*******************************************************************************
  102. *
  103. * fileUploadPathClose - close the event-destination file (WindView)
  104. *
  105. * This routine closes the file associated with <pathId> that is serving
  106. * as a destination for event data.
  107. *
  108. * RETURNS: N/A
  109. * SEE ALSO: fileUploadPathCreate()
  110. */
  111. void fileUploadPathClose 
  112.     (
  113.     UPLOAD_ID pathId /* generic upload-path descriptor */
  114.     )
  115.     {
  116.     FILE_UPLOAD_DESC *pFileUploadDesc; /* pathId cast to see private data */
  117.     if (pathId == NULL)
  118.         return;
  119.     pFileUploadDesc = (FILE_UPLOAD_DESC *) pathId;
  120.     close (pFileUploadDesc->fileFd);
  121.     free (pFileUploadDesc);
  122.     }
  123. /*******************************************************************************
  124. *
  125. * fileUploadPathWrite - write to the event-destination file (WindView)
  126. *
  127. * This routine writes <size> bytes of data beginning at <pStart> to the file
  128. * indicated by <pathId>. 
  129. *
  130. * RETURNS: The number of bytes written, or ERROR.
  131. *
  132. */
  133. int fileUploadPathWrite
  134.     (
  135.     UPLOAD_ID   pathId,                 /* generic upload-path descriptor */
  136.     char *      pStart,                 /* address of data to write */
  137.     size_t      size                    /* number of bytes of data at pStart */
  138.     )
  139.     {
  140.     if (pathId == NULL)
  141.         return (ERROR);
  142.     return (write (((FILE_UPLOAD_DESC *) pathId)->fileFd, pStart, size));
  143.     }