fileno()

Arild Hansen arildh at stud.cs.uit.no
Tue Sep 19 05:26:27 EDT 2000


Donn Cave wrote:

> Quoth "Arild Hansen" <arildh at stud.cs.uit.no>:
> | What is the exact purpose of fileno()? I keep searching for a good
> | explanation of this function returning a file handler to an object, but what
> | is the precise meaning and purpose of this? All help greatly appreciated !
>
> The file object is an I/O buffer and a device.  The C library allocates
> space for the buffer in your process memory, and when you read or write
> the data comes from or goes to that buffer.  The stdio C library functions
> manage the buffer by reading or writing to the device.
>
> Since physical device access is a very expensive operation for the computer,
> buffering like that basically allows you to work with small or random size
> I/O requests while economizing on system resources.  However, there are
> times when you need to do something that the stdio library doesn't account
> for, like select(), or a filesystem lock, or some terminal driver function.
>
> The fileno() function exposes the file object's file descriptor or unit
> number, which on UNIX is the raw device.  Select() already knows about
> fileno(), so you can give it a socket or whatever and it will call fileno()
> itself, but usually it's up to you to call fileno() and get the descriptor.
>
> Of course the socket fileno() function is more or less the same idea as
> the file object's fileno(), but the socket isn't a file object and doesn't
> have its own buffer.  (On UNIX you can make a file object from a socket,
> but it's difficult to make that work both properly and efficiently with
> select().)  The result from socket fileno() is a file descriptor on UNIX,
> but it isn't necessarily so on other operating systems.
>
> You can get file descriptors directly if you use the posix.open() function,
> (A.K.A. os.open().)
>
>         Donn Cave, donn at u.washington.edu

Thx for very informative answers !!

Arild Hansen



More information about the Python-list mailing list