Subversion Repositories Kolibri OS

Rev

Rev 4921 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 1990 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that the above copyright notice and this paragraph are
  7.  * duplicated in all such forms and that any documentation,
  8.  * advertising materials, and other materials related to such
  9.  * distribution and use acknowledge that the software was developed
  10.  * by the University of California, Berkeley.  The name of the
  11.  * University may not be used to endorse or promote products derived
  12.  * from this software without specific prior written permission.
  13.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  14.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  15.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16.  */
  17.  
  18. /*
  19. FUNCTION
  20. <<fileno>>, <<fileno_unlocked>>---return file descriptor associated with stream
  21.  
  22. INDEX
  23.         fileno
  24. INDEX
  25.         fileno_unlocked
  26.  
  27. ANSI_SYNOPSIS
  28.         #include <stdio.h>
  29.         int fileno(FILE *<[fp]>);
  30.  
  31.         #define _BSD_SOURCE
  32.         #include <stdio.h>
  33.         int fileno_unlocked(FILE *<[fp]>);
  34.  
  35. TRAD_SYNOPSIS
  36.         #include <stdio.h>
  37.         int fileno(<[fp]>)
  38.         FILE *<[fp]>;
  39.  
  40.         #define _BSD_SOURCE
  41.         #include <stdio.h>
  42.         int fileno_unlocked(<[fp]>)
  43.         FILE *<[fp]>;
  44.  
  45. DESCRIPTION
  46. You can use <<fileno>> to return the file descriptor identified by <[fp]>.
  47.  
  48. <<fileno_unlocked>> is a non-thread-safe version of <<fileno>>.
  49. <<fileno_unlocked>> may only safely be used within a scope
  50. protected by flockfile() (or ftrylockfile()) and funlockfile().  This
  51. function may safely be used in a multi-threaded program if and only
  52. if they are called while the invoking thread owns the (FILE *)
  53. object, as is the case after a successful call to the flockfile() or
  54. ftrylockfile() functions.  If threads are disabled, then
  55. <<fileno_unlocked>> is equivalent to <<fileno>>.
  56.  
  57. RETURNS
  58. <<fileno>> returns a non-negative integer when successful.
  59. If <[fp]> is not an open stream, <<fileno>> returns -1.
  60.  
  61. PORTABILITY
  62. <<fileno>> is not part of ANSI C.
  63. POSIX requires <<fileno>>.
  64.  
  65. <<fileno_unlocked>> is a BSD extension also provided by GNU libc.
  66.  
  67. Supporting OS subroutines required: none.
  68. */
  69.  
  70. #include <_ansi.h>
  71. #include <stdio.h>
  72. #include <errno.h>
  73. #include "local.h"
  74.  
  75. int
  76. _DEFUN(fileno, (f),
  77.        FILE * f)
  78. {
  79.   int result;
  80.   CHECK_INIT (_REENT, f);
  81.   _newlib_flockfile_start (f);
  82.   if (f->_flags)
  83.     result = __sfileno (f);
  84.   else
  85.     {
  86.       result = -1;
  87.       _REENT->_errno = EBADF;
  88.     }
  89.   _newlib_flockfile_end (f);
  90.   return result;
  91. }
  92.