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

VxWorks

开发平台:

C/C++

  1. /* ftruncate.c - POSIX file truncation */
  2. /* Copyright 1984-1994 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01c,28jan94,dvs  doc changes
  8. 01b,05jan94,kdl  general cleanup.
  9. 01a,02nov93,dvs  written
  10. */
  11. /*
  12. DESCRIPTION: This module contains the POSIX compliant ftruncate() routine 
  13. for truncating a file.
  14. INCLUDE FILES: unistd.h
  15. SEE ALSO:
  16. NOMANUAL
  17. */
  18. /* INCLUDES */
  19. #include "vxWorks.h"
  20. #include "unistd.h"
  21. #include "errno.h"
  22. #include "ioLib.h"
  23. #include "dosFsLib.h"
  24. /******************************************************************************
  25. *
  26. * ftruncate - truncate a file (POSIX)
  27. *
  28. * This routine truncates a file to a specified size. 
  29. *
  30. * RETURNS: 0 (OK) or -1 (ERROR) if unable to truncate file.
  31. *
  32. * ERRNO:
  33. *  EROFS 
  34. *   - File resides on a read-only file system.
  35. *  EBADF
  36. *   - File is open for reading only.
  37. *  EINVAL
  38. *   - File descriptor refers to a file on which this operation is impossible.
  39. *
  40. */
  41. int ftruncate 
  42.     (
  43.     int  fildes, /* fd of file to truncate */
  44.     off_t length /* length to truncate file */
  45.     )
  46.     {
  47.     int  status; /* status value from ioctl */
  48.     if ((status = ioctl (fildes, FIOTRUNC, length)) == ERROR)
  49. {
  50. /* map errno to that specified by POSIX */
  51. switch (errno)
  52.             {
  53.     case S_ioLib_WRITE_PROTECTED:
  54. errno = EROFS;
  55. break;
  56.     case S_dosFsLib_READ_ONLY:
  57. errno = EBADF;
  58. break;
  59.     case S_ioLib_UNKNOWN_REQUEST:
  60.     default:
  61. errno = EINVAL;
  62. break;
  63.     }
  64. return (ERROR);
  65. }
  66.     else 
  67. return (OK);
  68.     }